Sobes.tech
Junior — Middle

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.