In Kotlin, you must override either both or neither of the equals(Any?) and hashCode() methods in order to keep the
contract between the two:
- Whenever the
hashCode method is invoked on the same object more than once, it must consistently return the same integer, provided
no information used in equals comparisons on the object is modified.
- If two objects are equal according to the
equals method, then calling the hashCode method on each of the two objects
must produce the same integer result.
By overriding only one of the two methods with a non-trivial implementation, this contract is almost certainly broken.
Noncompliant code example
class MyClass { // Noncompliant - should also override "hashCode()"
override fun equals(other: Any?): Boolean {
/* ... */
}
}
Compliant solution
class MyClass { // Compliant
override fun equals(other: Any?): Boolean {
/* ... */
}
override fun hashCode(): Int {
/* ... */
}
}