Sobes.tech
Junior

Hogyan működnek az adat osztályok Kotlinben?

sobes.tech MI

Válasz az MI-től

A Kotlin adat osztályokat adatok tárolására használják. A fordító automatikusan generálja a szabványos metódusokat:

  • equals(): Az példányokat az attribútumaik értékei alapján hasonlítja össze.
  • hashCode(): Az attribútumértékek alapján generál egy hash kódot.
  • toString(): Visszaad egy sztring reprezentációt, amely tartalmazza az összes attribútum nevét és értékét.
  • copy(): Létrehoz egy másolatot az objektumról, szükség szerint módosítva a megadott attribútumokat.
  • componentN(): Metódusok az destrukturáláshoz (az objektum felbontása különálló attribútumokra).
// Adat osztály példa
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

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

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() és destrukturálás
    val (name, age) = user1
    println("Név: $name, Kor: $age") // Név: Alice, Kor: 30
}

Kulcsfontosságú pontok:

  • Minden tulajdonság, amit a fő konstruktorban definiálnak, val vagy var kell legyen.
  • Az adat osztály nem lehet abstract, open, sealed vagy inner.
  • Az adat osztályok örökölhetnek más osztályokat vagy implementálhatnak interfészeket.
  • A fő konstruktoron kívül deklarált tulajdonságok nem vesznek részt a szabványos metódusok generálásában.
Metódus Leírás
equals() Összehasonlítja a fő konstruktor tulajdonságait.
hashCode() Hash kódot generál a fő konstruktor tulajdonságai alapján.
toString() Megjeleníti a fő konstruktor tulajdonságainak sztring reprezentációját.
copy() Felületi másolatot készít, lehetőséggel a tulajdonságok módosítására.
componentN() Hozzáférés a tulajdonságokhoz a deklaráció sorrendjében.

A adat osztályok jelentősen leegyszerűsítik a POJO (Plain Old Java Object) vagy DTO (Data Transfer Object) kezelését, csökkentve a boilerplate kódot.