Sobes.tech
Middle

Porozprávaj mi o dátových triedach a sealed triedach v Kotlin.

sobes.tech AI

Odpoveď od AI

Dátové triedy v Kotlinu sa používajú na ukladanie údajov. Automaticky generujú užitočné metódy ako equals(), hashCode(), toString(), copy() a tiež komponenty na destrukturalizáciu.

// Príklad dátovej triedy
data class User(val name: String, val age: Int)

Seal triedy sa používajú na reprezentáciu obmedzenej hierarchie tried. Všetky podtriedy musia byť definované v tom istom súbore ako seal trieda (v Kotlin 1.5+ je toto obmedzenie zmiernené). To umožňuje kompilátoru zabezpečiť úplnosť pri kontrole podtried, napríklad v výraze when.

// Príklad seal triedy
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Príklad použitia seal triedy v `when`
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Úspech: ${result.data}")
        is Result.Error -> println("Chyba: ${result.message}")
        Result.Loading -> println("Načítava sa...")
    }
}

Hlavné rozdiely:

  • Účel: dátové triedy - ukladanie údajov, seal triedy - obmedzenie hierarchie tried.
  • Generované metódy: dátové triedy generujú štandardné metódy pre údaje, seal triedy - nie.
  • Obmedzenie podtried: seal triedy ukladajú obmedzenia na deklaráciu podtried, dátové triedy - nie.
  • Kompletnosť v when: Kotlin kompilátor môže skontrolovať úplnosť podtried seal triedy v when bez else vetvy.

Obe, seal aj dátové triedy, môžu byť abstraktné, avšak dátové triedy nemôžu byť open (pretože sú predvolene final) a nemôžu priamo implementovať open metódy (len cez rozhrania alebo abstraktné triedy). Seal triedy sú, predvolene, abstraktné a ich konštruktory sú súkromné.