Skip to content
Kotlin

Data Classes

Model immutable data with auto-generated equals, copy, and destructuring.

#data-class#model

Code

kotlin
data class User(val id: Int, val name: String, val email: String? = null)

val u1 = User(1, "Alice", "[email protected]")
val u2 = User(2, "Bob")

// Auto-generated toString/equals/hashCode/copy
println(u1)
println(u1 == User(1, "Alice", "[email protected]"))

// Destructuring
val (id, name) = u1
println("$id: $name")

// copy with overrides
val u3 = u1.copy(name = "Alice Smith")
println(u3)

// Sealed hierarchy with data classes
sealed class Result<out T> {
    data class Success<T>(val value: T) : Result<T>()
    data class Failure(val message: String) : Result<Nothing>()
}

fun handle(r: Result<Int>) = when (r) {
    is Result.Success -> println("ok: ${r.value}")
    is Result.Failure -> println("err: ${r.message}")
}

handle(Result.Success(42))
handle(Result.Failure("nope"))

// Data class in collection
val list = listOf(u1, u2, u3)
println(list.associateBy { it.id })