我正在实现一个纯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的子类。
答案 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
模块下。