我希望我的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
进行比较。光荣的“无效安全”怎么样?他们忘了反思?我没有找到?::
运算符或其他东西。
答案 0 :(得分:3)
想一想。该类在String
和String?
之间实际上没有差异,它只是不同的类型。您无法在可空类型上调用该运算符,因为它可能意味着您在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
个案。