In data classes, the default behavior of the equals() method is to check the equality by field values. This works well for primitive
fields or fields, whose type overrides equals(), but this behavior doesn’t work as expected for array fields.
By default, array fields are compared by their reference, so overriding equals() is highly recommended to ensure a deep equality
check. The same applies to the hashcode() method.
This rule reports an issue if a record class has an array field and is not overriding equals() or hashcode() methods.
Noncompliant code example
data class Person(val names: Array<String>, val age: Int) {} // Noncompliant
Compliant solution
data class Person(val names: Array<String>, val age: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Person
if (!names.contentEquals(other.names)) return false
if (age != other.age) return false
return true
}
override fun hashCode(): Int {
var result = names.contentHashCode()
result = 31 * result + age
return result
}
}