Skip to content
Kotlin

Data Classes

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

By EZ4Code Team
data-classmodel

Code

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 })

Explanation

Data classes auto-generate toString, equals, hashCode, copy, and componentN for destructuring based on constructor properties. They are perfect for plain model objects and work well inside sealed hierarchies to model algebraic types. The copy function supports immutable updates by overriding only selected fields.

More Kotlin Snippets