Czym różni się użycie sealed class od enum w odniesieniu do ich konstruktorów i możliwości ich tworzenia?
sobes.tech AI
Odpowiedź od AI
Enum w Kotlin (i Java) reprezentuje zbiór stałych. Każdy enum ma ograniczony zestaw instancji, zdefiniowanych w samej deklaracji. Konstruktory enum są zawsze prywatne, i nie można tworzyć nowych instancji — tylko tych, które są zadeklarowane.
Sealed class (klasa zamknięta) to abstrakcyjna klasa z ograniczonym zestawem podklas, które są deklarowane w tym samym pliku. W przeciwieństwie do enum, klasa zamknięta pozwala na tworzenie różnych typów z różną strukturą i stanem. Konstruktory klasy zamkniętej mogą być otwarte lub zamknięte, i można tworzyć nowe instancje podklas, a nie tylko stałe konstansy.
Przykład:
// Enum z prywatnym konstruktorem i stałymi instancjami
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Klasa zamknięta z różnymi podklasami i konstruktorami
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
W ten sposób enum jest ograniczony do zestawu stałych instancji z prywatnym konstruktorem, a klasa zamknięta — jest bardziej elastyczna, pozwalając na tworzenie różnych podklas z własnymi konstruktorami i stanami.