什么是'javaClass'的纯Kotlin替代品?

时间:2019-07-03 19:33:54

标签: kotlin

我正在实现一个纯Kotlin库,该库将在开源许可证下发布。在我的库中,有class A,我想在其中覆盖equals()。我使用Android Studio的自动生成器来执行此操作,但其中包含对javaClass的引用:

override fun equals(other: Any?): Boolean {
   if (this === other) return true
   if (javaClass != other?.javaClass) return false
   other as A
   ...
}

此参考在纯Kotlin库中安全使用吗?如果有人使用我的库来定位JavaScript,将会有什么效果?是否有javaClass的纯Kotlin替代品?我想避免类似的事情

if (other !is A) ...

因为我不想注册A的子类。

1 个答案:

答案 0 :(得分:3)

您所做的并不安全。 Android Studio生成此代码的原因是,实际上您并不是在开发多平台项目。

多平台版本如下:

override fun equals(other: Any?): Boolean {
    if (this === other) return true
    if (other == null || this::class != other::class) return false
    return true
}

如果您的目标是拥有一个与平台无关的库,请将其开发为多平台项目,然后将大部分代码放在common模块下。