Koja je razlika između korišćenja sealed class i enum u pogledu njihovih konstruktora i mogućnosti njihovog kreiranja?
sobes.tech АИ
Одговор од АИ
Enum u Kotlinu (i Java) predstavlja skup fiksnih konstanti. Svaki enum ima ograničen skup instanci, definisanih u samoj deklaraciji. Konstruktori enum-a su uvek privatni, i ne može se kreirati nove instance — samo one koje su deklarisane.
Sealed class (zapečaćena klasa) je apstraktna klasa sa ograničenim brojem naslednika, koji se deklarisu u istoj datoteci. Za razliku od enum-a, sealed class omogućava kreiranje različitih tipova sa različitom strukturom i stanjem. Konstruktori sealed class mogu biti otvoreni ili zatvoreni, i može se kreirati nove instance naslednika, a ne samo fiksne konstante.
Primer:
// Enum sa privatnim konstruktorom i fiksnim instancama
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Sealed class sa različitim naslednicima i konstruktorima
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
Na ovaj način, enum je ograničen na fiksni skup instanci sa privatnim konstruktorom, sealed class — fleksibilniji, omogućava kreiranje različitih podklasa sa sopstvenim konstruktorima i stanjima.