Mesélj a data- és sealed-osztályokról Kotlinban.
sobes.tech MI
Válasz az MI-től
A Kotlin adat osztályokat adatok tárolására használják. Automatikusan generálják a equals(), hashCode(), toString(), copy() hasznos metódusokat, valamint destrukturálási komponenseket.
// Adat osztály példa
data class User(val name: String, val age: Int)
A Seal osztályokat korlátozott öröklődési hierarchia ábrázolására használják. Minden alosztálynak ugyanabban a fájlban kell lennie, mint a seal osztály (a Kotlin 1.5+ verzióban ez a korlátozás enyhült). Ez lehetővé teszi a fordítónak, hogy teljes körűen ellenőrizze az alosztályokat, például a when kifejezésben.
// Seal osztály példa
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Seal osztály használata `when` kifejezésben
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Siker: ${result.data}")
is Result.Error -> println("Hiba: ${result.message}")
Result.Loading -> println("Betöltés...")
}
}
Fő különbségek:
- Cél: adat osztályok - adatok tárolása, seal osztályok - öröklődési hierarchia korlátozása.
- Generált metódusok: adat osztályok generálják a standard metódusokat az adatokhoz, seal osztályok - nem.
- Alosztály korlátozása: seal osztályok korlátozásokat írnak elő az alosztályok deklarálására, adat osztályok - nem.
whenteljes körű ellenőrzése: a Kotlin fordítója ellenőrizheti a seal osztály alosztályainak teljes körűségétwhen-benelsenélkül.
Mind a seal, mind az adat osztályok lehetnek absztraktak, azonban az adat osztályok nem lehetnek open-ek (mivel alapértelmezés szerint final-ek), és nem lehetnek közvetlenül open metódusokat implementálni (csak interfészek vagy absztrakt osztályok révén). A seal osztályok alapértelmezés szerint absztraktak, és konstruktoruk privát.