假设我只希望在生成的equals和hashCode实现中包含一个或两个字段(或者排除一个或多个字段)。对于简单类,例如:
data class Person(val id: String, val name: String)
Groovy有以下特点:
@EqualsAndHashCode(includes = 'id')
龙目岛有:
@EqualsAndHashCode(of = "id")
静态编程语言中这样做的惯用方法是什么?
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
是可变的,而且额外的构造函数定义很难看。
我也不知道Kotlin(1.1)中的“idomatic方式”如何做到这一点。。。
我最终覆盖了equals
和hashCode
:
data class Person(val id: String,
val name: String) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other?.javaClass != javaClass) return false
other as Person
if (id != other.id) return false
return true
}
override fun hashCode(): Int {
return id.hashCode()
}
}
难道没有更好的方法吗?
这种方法可能适用于财产排除:
class SkipProperty<T>(val property: T) {
override fun equals(other: Any?) = true
override fun hashCode() = 0
}
SkipProperty。equals
仅返回true,这会导致父对象的equals
中跳过嵌入的属性。
data class Person(
val id: String,
val name: SkipProperty<String>
)
我用过这种方法。
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)
}
我正在为一些JSON建模,并使用以下几行代码 随着: 但是,请继续查看错误:。 你知道为什么吗? 仅供参考,JSON看起来像:
我尝试在和中排序一个大小为100000000的数组,我可以看到它们之间存在巨大的性能差距。对于这个数字,几乎比快倍(在我的机器上)。 我记录了一些结果,发现当大小在10000左右或更小时,swift的速度更快,但一旦数值上升,就会变得比慢得多。 下面是Swift和Kotlin的代码, 迅捷 科特林 下面是两个记录的时间, 迅捷 因此,在这里,您可以看到在大小增加时变得极其缓慢,尽管在数量较小时它会
从Kotlin开始,想要创建一个数据类
如何避免对类的可选属性使用 我应该创建一个局部变量吗?我认为使用不是一个好的做法
问题内容: 我正在尝试将一个对象呈现为json,包括嵌套的属性,并按created_at属性对其进行排序。 我正在使用代码执行此操作: 如何按created_at属性对呼叫进行排序? 问题答案: 如果您认为Rails是如何工作的,则调用只是与Call模型相关的一种方法。有几种方法可以做到这一点。一种是在关联上设置订单选项。一种是全局更改Call模型的默认范围,另一种是在Customer模型中创建一
将属性包含到模型中意味着 EF 将获得该属性的元数据,并且将尝试从数据库读取该属性的值或将该属性的值写入到数据库。 惯例 按照惯例,具有 getter 和 setter 访问器的公共(public)属性将被包含在模型中。 数据注解 可以使用数据注解将属性从模型中排除。 public class Blog { public int BlogId { get; set; } publi