Sobes.tech
Junior

Jak fungují datové třídy v Kotlinu?

sobes.tech AI

Odpověď od AI

Datové třídy v Kotlinu se používají pro ukládání dat. Kompilátor automaticky generuje standardní metody:

  • equals(): Porovnává instance na základě hodnot jejich vlastností.
  • hashCode(): Generuje hash kód na základě hodnot vlastností.
  • toString(): Vrací řetězcové zobrazení obsahující názvy a hodnoty všech vlastností.
  • copy(): Vytváří kopii objektu, případně mění hodnoty uvedených vlastností.
  • componentN(): Metody pro destrukturování (rozklad objektu na jednotlivé vlastnosti).
// Příklad datové třídy
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() a destrukturování
    val (name, age) = user1
    println("Jméno: $name, Věk: $age") // Jméno: Alice, Věk: 30
}

Klíčové body:

  • Všechny vlastnosti definované v hlavním konstruktoru musí být val nebo var.
  • Datová třída nemůže být abstract, open, sealed nebo inner.
  • Datové třídy mohou dědit od jiných tříd nebo implementovat rozhraní.
  • Vlastnosti deklarované mimo hlavní konstruktor se nezapočítávají do generování standardních metod.
Metoda Popis
equals() Porovnává vlastnosti hlavního konstruktoru.
hashCode() Generuje hash na základě vlastností hlavního konstruktoru.
toString() Zobrazuje řetězcovou reprezentaci vlastností hlavního konstruktoru.
copy() Vytváří plochou kopii s možností změny vlastností.
componentN() Přístup ke vlastnostem v pořadí jejich deklarace v konstruktoru.

Datové třídy výrazně zjednodušují práci s POJO (Plain Old Java Object) nebo DTO (Data Transfer Object), snižují boilerplate kód.