data class A と B と C があって、C は A の配列と B を持っています。
- data class A(val name: String)
-
- data class B(val age: Int)
-
- data class C(val names: Array<A>, val age: B)
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))
assertEquals(A("hoge"), A("hoge"))
assertEquals(B(10), B(10))
まぁ、そうだよね。
C に対する以下のテストは
通りません
- assertEquals(C(arrayOf(A("hoge")), B(10)), C(arrayOf(A("hoge")), B(10)))
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
- }
- }
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)
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)))
assertEquals(C(listOf(A("hoge")), B(10)), C(listOf(A("hoge")), B(10)))
通った
結論: Array はダメだが List ならいい感じにやってくれる
0 件のコメント:
コメントを投稿