Sobes.tech
Junior

Na czym polega cecha Data Class w porównaniu z innymi klasami w Kotlin?

sobes.tech AI

Odpowiedź od AI

Cechy Data Class w Kotlin:

  • Automatyczne generowanie funkcji equals(), hashCode(), toString(), copy() i componentN().
  • Wymagają co najmniej jednego parametru w konstruktorze.
  • Wszystkie parametry konstruktora muszą być zadeklarowane jako val lub var.
  • Przeznaczone głównie do przechowywania danych.

Przykład:

// Klasa zwykła
class User(val name: String, val age: Int)

// Data Class
data class DataUser(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    println(user1 == user2) // false (domyślnie porównuje referencje)
    println(user1.toString()) // Wyświetli coś w stylu User@hashcode

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (porównuje dane)
    println(dataUser1.toString()) // Wyświetli DataUser(name=Alice, age=30)
}

Różnice w funkcjach generowanych:

Funkcja Klasa zwykła Data Class
equals() Porównanie referencji Porównanie danych po polach
hashCode() Zależy od implementacji Zależy od danych po polach
toString() Nazwa klasy i hash Nazwa klasy i wartości pól
copy() Nie (wymaga ręcznej implementacji) Tak (pozwala na łatwe tworzenie kopii)
componentN() Nie Tak (pozwala na destrukturyzację obiektu)

Użycie componentN():

// Definicja Data Class
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // Destrukturyzacja za pomocą component1(), component2()
    println("x: $x, y: $y") // Wyświetli x: 10, y: 20
}