data class A(val name: String)
data class B(val age: Int)
data class C(val names: Array<A>, val age: B)
A と B に対する以下のテストは通ります
assertEquals(A("hoge"), A("hoge"))
assertEquals(B(10), B(10))
まぁ、そうだよね。
C に対する以下のテストは通りません
assertEquals(C(arrayOf(A("hoge")), B(10)), C(arrayOf(A("hoge")), B(10)))
data class がいい感じにやってくれるのかと思っていたのよ。やってくれなかった。
警告が出るのはそういうことなのね。
override すればいいんだけど... いけてない
class C(val names: Array<A>, val age: B) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other?.javaClass != javaClass) return false
other as C
if (!Arrays.equals(names, other.names)) return false
if (age != other.age) return false
return true
}
override fun hashCode(): Int {
var result = Arrays.hashCode(names)
result = 31 * result + age.hashCode()
return result
}
}
Array で持つのやめて List にしたらどうかなと思って試したら
data class A(val name: String)
data class B(val age: Int)
data class C(val names: List<A>, val age: B)
assertEquals(C(listOf(A("hoge")), B(10)), C(listOf(A("hoge")), B(10)))
通った
結論: Array はダメだが List ならいい感じにやってくれる
0 件のコメント:
コメントを投稿