怎么获得Any的课程? Kotlin变量?

时间:2018-01-31 21:02:03

标签: reflection kotlin kotlin-null-safety

我希望我的equals能够比较课程,我写了

    override fun equals(other: Any?): Boolean {
        return this::class == other::class && ...

    }

不幸的是它发誓

Expression in a class literal has a nullable type 'Any?', use !! to make the type non-nullable

但我也希望与null进行比较。光荣的“无效安全”怎么样?他们忘了反思?我没有找到?::运算符或其他东西。

1 个答案:

答案 0 :(得分:3)

想一想。该类在StringString?之间实际上没有差异,它只是不同的类型。您无法在可空类型上调用该运算符,因为它可能意味着您在null上调用它,这将导致NullPointerException

val x: String? = null
x!!::class //throws NPE

借助范围函数let,您可以确保它不是null并使用class literal syntax

return other?.let { this::class == other::class } ?: false

Elvis operator ?:用于通过使表达式null(不等于)来处理false个案。