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
hashCodemethod is invoked on the same object more than once, it must consistently return the same integer, provided no information used inequalscomparisons on the object is modified.- If two objects are equal according to the
equalsmethod, then calling thehashCodemethod 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.
class MyClass { // Noncompliant - should also override "hashCode()"
override fun equals(other: Any?): Boolean {
/* ... */
}
}
class MyClass { // Compliant
override fun equals(other: Any?): Boolean {
/* ... */
}
override fun hashCode(): Int {
/* ... */
}
}