Effective Kotlin: Methods Common to All Objects

Let’s see how we can apply Joshua Bloch’s Effective Java in the Kotlin world. Today’s topic is Methods Common to All Objects.

Item 10: Obey the general contract when overriding equals

In Kotlin, we should use data classes for classes that represent values. The compiler will automatically generate hashCode(), equals() and other methods.

data class MyDataClass(val someValue: Int, var anotherValue: String)

Item 11: Always override hashCode when you override equals

See Item 10 for using data classes.

Item 12: Always override toString

Again, See Item 10 for using data classes.

Item 13: Override clone judiciously

As expected, when using data classes, the compiler will generate the copy() function. With the example in Item 10, it looks like something below:

fun copy(
  someValue: Int = this.someValue,
  anotherValue: String = this.anotherValue
) = MyDataClass(someValue, anotherValue)

Item 14: Consider implementing Comparable

We should use the Comparable from Kotlin’s standard library instead of the Java one, which also provides lots of extension functions.

See also