Mi a különbség a sealed class és az enum használata között a konstruktorok és a létrehozási lehetőségek tekintetében?
sobes.tech MI
Válasz az MI-től
A Kotlin (és Java) enum egy fix állandók halmazát képviseli. Minden enumnak korlátozott példányszáma van, amelyeket a deklarációban határozunk meg. Az enum konstruktorai mindig privátak, és nem lehet új példányokat létrehozni — csak azokat, amiket deklaráltunk.
A sealed class (lezárt osztály) egy absztrakt osztály, amelynek korlátozott számú leszármazottja van, és ugyanabban a fájlban vannak deklarálva. Ellentétben az enum-mal, a sealed class lehetővé teszi különböző típusok létrehozását különböző szerkezetekkel és állapotokkal. A sealed class konstruktorai nyitottak vagy zártak lehetnek, és új leszármazott példányokat lehet létrehozni, nem csak fix konstansokat.
Példa:
// Privát konstruktorral és fix példányokkal rendelkező enum
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Különböző leszármazottak és konstruktorok a sealed class-ben
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
Így az enum egy fix példányhalmazra korlátozódik privát konstruktorral, míg a sealed class rugalmasabb, lehetővé téve különböző alosztályok létrehozását saját konstruktorokkal és állapotokkal.