Kotlin中数据类的Equals方法

韦巴哈夫

我有以下数据类

data class PuzzleBoard(val board: IntArray) {
    val dimension by lazy { Math.sqrt(board.size.toDouble()).toInt() }
}

我读过Kotlin中的数据类get equals()/ hashcode()method是免费的。

我实例化了两个对象。

val board1 = PuzzleBoard(intArrayOf(1,2,3,4,5,6,7,8,0))
val board2 = PuzzleBoard(intArrayOf(1,2,3,4,5,6,7,8,0))

但是,以下语句仍返回false。

board1 == board2
board1.equals(board2)
热键

在Kotlindata类的相等性检查中,与其他类一样,使用equals(...)来比较数组,比较数组引用而不是内容。这种现象说明在这里

所以,每当你说

  • arr1 == arr2

  • DataClass(arr1) == DataClass(arr2)

  • ...

您可以通过进行比较equals(),即通过引用进行比较

鉴于,

val arr1 = intArrayOf(1, 2, 3)
val arr2 = intArrayOf(1, 2, 3)

println(arr1 == arr2) // false is expected here
println(PuzzleBoard(arr1) == PuzzleBoard(arr2)) // false too


要覆盖它并在结构上比较数组,可以使用在数据类中 实现 equals(...) + hashCode() Arrays.equals(...) Arrays.hashCode(...)

override fun equals(other: Any?): Boolean{
    if (this === other) return true
    if (other?.javaClass != javaClass) return false

    other as PuzzleBoard

    if (!Arrays.equals(board, other.board)) return false

    return true
}

override fun hashCode(): Int{
    return Arrays.hashCode(board)
}

这段代码是IntelliJ IDEA可以自动为非数据类生成的。

另一种解决方案是使用List<Int>而不是IntArray列表在结构上进行了比较,因此您无需覆盖任何内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在User类中重写equals方法

来自分类Dev

覆盖User类中的equals方法

来自分类Dev

密封类中的 Kotlin 数据类

来自分类Dev

Kotlin数据类的toString方法的混淆

来自分类Dev

Kotlin中带有ByteArray的数据类

来自分类Dev

Kotlin中的深度合并数据类

来自分类Dev

在Kotlin中递归建立数据类

来自分类Dev

Kotlin 多平台编程中的数据类

来自分类Dev

Java中的哪些类正在重写equals()和hashCode()方法?

来自分类Dev

在Quarkus的JSON响应中包含类名(Kotlin数据类)

来自分类Dev

从 Kotlin 中的类更新 UI 的正确方法

来自分类Dev

RealmObject的Kotlin数据类

来自分类Dev

Kotlin 中数据类中的参数可以是 var 吗?

来自分类Dev

有没有办法从常规Kotlin类中识别出Kotlin数据类?

来自分类Dev

在Kotlin中,数据类的Jackson反序列化错误

来自分类Dev

是否可以在Kotlin中嵌套数据类?

来自分类Dev

Java类,用于从Kotlin中的适配器访问数据

来自分类Dev

从数据类在Kotlin中合并字符串数组?

来自分类Dev

在Kotlin中,数据类的Jackson反序列化错误

来自分类Dev

如何在 Kotlin 中多次过滤数据类

来自分类Dev

如何在Castle.Core中实现IProxyGenerationHook的类中实现Equals和GetHashCode的重写方法?

来自分类Dev

从列表中删除重复的对象,而无需覆盖类中的 equals 和 hashcode 方法

来自分类Dev

适配器类与数据类中的toXXX()方法

来自分类Dev

适配器类与数据类中的toXXX()方法

来自分类Dev

Kotlin中的类声明

来自分类Dev

Kotlin类中“ this”的目的

来自分类Dev

如何在Kotlin中向Java类添加静态方法

来自分类Dev

Kotlin-无法访问其他类中的方法

来自分类Dev

复合id类的hashCode()和equals()方法

Related 相关文章

热门标签

归档