gpt4 book ai didi

kotlin - 在生成 equals()、hashCode() 等时忽略某些属性

转载 作者:行者123 更新时间:2023-12-02 17:19:20 26 4
gpt4 key购买 nike

假设我有一个具有三个属性的数据类:

data class Product(
val id: Int,
val name: String,
val manufacturer: String)

如果我理解正确,Kotlin 将使用所有三个属性生成 equals()hashCode(),如下所示:

override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null || javaClass != other.javaClass) return false
val that = other as Product?
return id == that.id &&
name == that!!.name &&
manufacturer == that.manufacturer
}

override fun hashCode(): Int {
return Objects.hash(id, name, manufacturer)
}

如果我不想在 equals()hashCode() 中使用 id 怎么办?有没有办法告诉 Kotlin 在生成这些函数时忽略某些属性? toString()compareTo() 怎么样?

最佳答案

对于数据类,这些函数是使用主构造函数中声明的所有属性生成的。来自official documentation :

The compiler automatically derives the following members from all properties declared in the primary constructor:

  • equals()/hashCode() pair,
  • toString() of the form "User(name=John, age=42)",
  • componentN() functions corresponding to the properties in their order of declaration,
  • copy() function (see below).

如果您不希望某个属性在其实现中被考虑在内,则必须将其移出主构造函数,或者您自己实现这些函数。

关于类似问题的更多讨论 here .

关于kotlin - 在生成 equals()、hashCode() 等时忽略某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com