1

我也想让我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

但我也想和nulls比较。光荣的“零安全”呢?他们为了反思而忘记了它?我没有找到?::运营商之类的。

4

1 回答 1

3

想想这个。Stringa和 a之间的类实际上没有区别String?,只是类型不同。您不能在可空类型上调用该运算符,因为这可能意味着您调用它null会导致NullPointerException

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

在 scope 函数的帮助下,let您可以确保它不是null并使用类文字语法

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

Elvis 运算符 ?:用于通过使表达式(不等于)来处理null大小写false

于 2018-01-31T21:11:07.137 回答