Pastāsti par datu klasēm un sealed klasēm Kotlin.
sobes.tech AI
Atbilde no AI
Kotlin valkā datu klases datu glabāšanai. Tās automātiski ģenerē noderīgas metodes equals(), hashCode(), toString(), copy(), kā arī destrukturizācijas komponentus.
// Datu klases piemērs
data class User(val name: String, val age: Int)
Sealed klases tiek izmantotas ierobežotas klases hierarhijas pārstāvībai. Visas apakšklas jādefinē tajā pašā failā, kur atrodas pati sealed klase (no Kotlin 1.5+ šis ierobežojums ir mazināts). Tas ļauj kompilatoram pārliecināties par apakškla pilnīgu pārskatīšanu, piemēram, when izteiksmē.
// Sealed klases piemērs
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
// Piemērs, kā izmantot sealed klasi `when` izteiksmē
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Veiksme: ${result.data}")
is Result.Error -> println("Kļūda: ${result.message}")
Result.Loading -> println("Ielādē...")
}
}
Galvenās atšķirības:
- Mērķis: datu klases - datu glabāšana, sealed klases - klases hierarhijas ierobežošana.
- Ģenerētās metodes: datu klases ģenerē standarta metodes datiem, sealed klases - nē.
- Apakškla ierobežojumi: sealed klases uzliek ierobežojumus apakškla deklarēšanai, datu klases - nē.
whenpilnīga pārbaude: Kotlin kompilators var pārbaudīt, vai visi apakškla ir iekļautiwhenizteiksmē bezelsedaļas.
Abi, sealed un datu klases, var būt abstrakti, taču datu klases nevar būt open (jo tās ir pēc noklusējuma finalas) un tieši neīsteno open metodes (tikai caur interfeisiem vai abstraktiem klases). Sealed klases pēc noklusējuma ir abstraktas, un to konstruktorus ir privātus.