Sobes.tech
Junior

Jak zaimplementować i używać klas danych w Kotlinie?

sobes.tech AI

Odpowiedź od AI

Klasy danych służą do przechowywania danych. Kompilator automatycznie generuje dla nich przydatne metody, takie jak equals(), hashCode(), toString(), copy() oraz funkcje componentN().

Implementacja: deklaracja klasy z prefiksem data.

data class User(val name: String, val age: Int)

Użycie:

Tworzenie instancji:

val user = User("Alice", 30)

Dostęp do właściwości:

val name = user.name // Alice
val age = user.age   // 30

Użycie wygenerowanych metod:

println(user.toString()) // User(name=Alice, age=30)

val anotherUser = User("Alice", 30)
println(user == anotherUser) // true (equals() wygenerowane)

val olderUser = user.copy(age = 31) // User(name=Alice, age=31)

val (userName, userAge) = user // Destrukturyzacja
println("Nazwa: $userName, Wiek: $userAge") // Nazwa: Alice, Wiek: 30

Cechy:

  • Wszystkie parametry głównego konstruktora muszą być val lub var.
  • Klasy danych nie mogą być abstract, open, sealed ani inner.
  • Właściwości z ciała klasy nie uczestniczą w generowaniu metod (equals, hashCode, copy, componentN).
data class Person(val name: String) {
    var height: Int = 0 // Nie uczestniczy w equals/hashCode/copy/componentN
}

val p1 = Person("Bob")
p1.height = 180
val p2 = Person("Bob")
p2.height = 190
println(p1 == p2) // true