Data Classes

What is a data class

Much like the case classes of Scala, the data classes of Kotlin are specialized classes that are intended to carry mostly data rather than behavior. The primary constructor is required to define at least one property, using val or var. Non-val or var parameters aren’t allowed here. You may add other properties or methods to the class, within the body {}, if you desire.

For each data class Kotlin will automatically create the equals(), hashCode(), and toString() methods. In addition, it provides a copy() method to make a copy of an instance while providing updated values for select properties. It also creates special methods that start with the word component—-component1(), component2(), and so on—to access each property defined through the primary constructor. We’ll refer to these methods as componentN() methods for convenience.

Here’s an example data class that represents a task or a to-do item, annotated with the data keyword to convey the intent:

// taskdataclass.kts
data class Task(val id: Int, val name: String, 
  val completed: Boolean, val assigned: Boolean)

Any property defined within the class body {}, if present, will not be used in the generated equals(), hashCode(), and ...