在我的 Kotlin/Java 项目中,我编写了一些继承自抽象类
这些模型类将用于表示来自数据库的数据。 在数据库中,有一个包含唯一整数标识符的ID列。
因此,当我使用这些模型类时,可以保证每个对象的“id”属性是唯一的。
阅读Java规范中关于“hashCode()”的内容后:
无论何时在应用程序的执行过程中多次调用同一对象的“hashCode”方法,只要在equals比较上使用的信息未修改,该方法必须始终返回相同的整数。 这个整数不需要在同一应用程序的另一个执行中保持一致。
如果两个对象根据equals(Object)方法相等,则在每个对象上调用hashCode方法必须产生相同的整数结果。
不要求如果两个对象根据equals(Object)方法不相等,则在每个对象上调用hashCode方法必须产生不同的整数结果。 然而,程序员应该知道为不相等的对象产生不同的整数结果可能会提高哈希表的性能。
我的问题是:
在
注意:我知道在Kotlin中,我们可以使用
BaseItem
的模型类:/**
* All data model classes should implement this
*/
abstract class BaseItem {
/**
* A unique integer identifier used to represent the data item in the database.
*/
abstract val id: Int
override fun equals(other: Any?) = (other is BaseItem) && id == other.id
}
这些模型类将用于表示来自数据库的数据。 在数据库中,有一个包含唯一整数标识符的ID列。
因此,当我使用这些模型类时,可以保证每个对象的“id”属性是唯一的。
阅读Java规范中关于“hashCode()”的内容后:
无论何时在应用程序的执行过程中多次调用同一对象的“hashCode”方法,只要在equals比较上使用的信息未修改,该方法必须始终返回相同的整数。 这个整数不需要在同一应用程序的另一个执行中保持一致。
如果两个对象根据equals(Object)方法相等,则在每个对象上调用hashCode方法必须产生相同的整数结果。
不要求如果两个对象根据equals(Object)方法不相等,则在每个对象上调用hashCode方法必须产生不同的整数结果。 然而,程序员应该知道为不相等的对象产生不同的整数结果可能会提高哈希表的性能。
我的问题是:
在
hashCode()
中返回这个唯一标识符是一个好的实践吗?注意:我知道在Kotlin中,我们可以使用
data
classes,以便编译器自动派生预定义成员,如equals()
,hashCode()
,toString()
等,但abstract
类不能成为data
类。(然而,我可以将BaseItem
的子类设为data
类 - 我不确定这是否是这种情况下更好的选择)。
equals
的实现,你几乎别无选择。 - Oliver CharlesworthgetType()
函数,根据BaseItem
的种类返回一个整数?或者您认为使用 Kotlin 的 数据类 提供的标准实现的equals()
和hashCode()
更好呢? - Farbod Salamat-Zadeh