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 vwhenbezelsevetvy.
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é.