gpt4 book ai didi

kotlin - Kotlin 数据类的属性包含/排除

转载 作者:IT老高 更新时间:2023-10-28 13:29:13 27 4
gpt4 key购买 nike

假设我只希望在生成的 equals 和 hashCode 实现中包含一个或两个字段(或者可能排除一个或多个字段)。对于一个简单的类,例如:

data class Person(val id: String, val name: String)

Groovy 有这个:

@EqualsAndHashCode(includes = 'id')

Lombok 有这个:

@EqualsAndHashCode(of = "id")

在 Kotlin 中这样做的惯用方式是什么?

到目前为止我的方法

data class Person(val id: String) {
// at least we can guarantee it is present at access time
var name: String by Delegates.notNull()

constructor(id: String, name: String): this(id) {
this.name = name
}
}

只是感觉不对...我真的不希望 name 是可变的,而且额外的构造函数定义很丑陋。

最佳答案

我使用过这种方法。

data class Person(val id: String, val name: String) {
override fun equals(other: Person) = EssentialData(this) == EssentialData(other)
override fun hashCode() = EssentialData(this).hashCode()
override fun toString() = EssentialData(this).toString().replaceFirst("EssentialData", "Person")
}

private data class EssentialData(val id: String) {
constructor(person: Person) : this(id = person.id)
}

关于kotlin - Kotlin 数据类的属性包含/排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29595301/

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