Kotlin Academy · Lektion

sealed class kontra sealed interface: när ska de användas

Förstå skillnaden mellan sealed classes och sealed interfaces i Kotlin.

Lektion 1 av 413 steg

sealed class kontra sealed interface: när ska de användas är en gratis lektion i Kotlin Academy på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Kotlin Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Sealed-typer i Kotlin

Sealed classes och sealed interfaces begränsar klasshierarkin till en känd uppsättning subtyper, vilket möjliggör fullständiga when-uttryck.

Grunderna i sealed class

En sealed class begränsar arv till samma paket (Kotlin 1.5+) eller samma fil.
sealed class Shape
class Circle(val radius: Double) : Shape()
class Rectangle(val w: Double, val h: Double) : Shape()
object Unknown : Shape()

sealed interface: mer flexibel

sealed interface gör att subtyper kan ärva andra klasser OCH implementera andra interface samtidigt – det kan inte sealed class.
sealed interface Result<out T>
data class Success<T>(val value: T) : Result<T>
data class Error(val ex: Exception) : Result<Nothing>

Viktiga skillnader

sealed class: subklasser kan ha konstruktorer och tillstånd. sealed interface: subtyper kan ärva vilken klass som helst. Använd sealed interface när Ni behöver större flexibilitet.
// sealed class subtype extends another class:
sealed interface Command
class MoveCommand(val dx: Int, val dy: Int) : Command, Serializable
class ResizeCommand(val scale: Double) : Command, Cloneable

Fullständig when: inget else behövs

När alla sealed-subtyper täcks är when-uttrycket fullständigt – inget else behövs och kompilatorn säkerställer att allt är med.
fun area(shape: Shape): Double = when (shape) {
    is Circle -> Math.PI * shape.radius * shape.radius
    is Rectangle -> shape.w * shape.h
}  // no 'else' — compiler guarantees completeness

Att lägga till en subtyp bryter befintliga when-uttryck

Lägg till en ny sealed-subtyp så kommer befintliga when-uttryck att sluta kompilera tills de har uppdaterats. Det är den främsta fördelen.
// Add Triangle to Shape:
class Triangle(val base: Double, val height: Double) : Shape()
// Now the area() function above won't compile until
// a Triangle branch is added — safety net!

Sealed classes med gemensamma egenskaper

Deklarera gemensamma egenskaper i sealed class.
sealed class NetworkResult {
    abstract val timestamp: Long
}
data class SuccessResult(val data: String, override val timestamp: Long) : NetworkResult()
data class FailureResult(val error: String, override val timestamp: Long) : NetworkResult()

Kapslade sealed-typer

Sealed-subtyper kan själva vara sealed och därmed bilda hierarkier på flera nivåer.
sealed interface UiState
object Loading : UiState
sealed interface Loaded : UiState
data class Content(val items: List<String>) : Loaded
data class Empty(val hint: String) : Loaded
data class Failure(val error: String) : UiState

object-subtyper för varianter utan tillstånd

Använd object för sealed-subtyper som inte innehåller något tillstånd.
sealed class Direction
object North : Direction()
object South : Direction()
object East : Direction()
object West : Direction()

fun move(d: Direction) = when (d) {
    North -> y++
    South -> y--
    East -> x++
    West -> x--
}

sealed + data class + object tillsammans

Blanda data class (för subtyper med tillstånd) och object (för singletoner) under en sealed-typ.
sealed class LoadState
object Idle : LoadState()
object Loading : LoadState()
data class Success(val count: Int) : LoadState()
data class Error(val msg: String) : LoadState()

När ska Ni välja sealed class respektive interface

Använd sealed class när alla subtyper delar ett gemensamt tillstånd. Använd sealed interface när subtyper behöver ärva olika basklasser eller implementera andra interface.

Snabbkontroll

Vilken fördel har sealed interface jämfört med sealed class?

Sammanfattning

sealed class/interface begränsar hierarkin till kända typer. En when över en sealed-typ är fullständig – inget else behövs. sealed interface gör att subtyper kan ärva andra klasser. Använd data class för subtyper med tillstånd och object för subtyper utan tillstånd.
Gratis att börja

Lär dig Kotlin med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”sealed class kontra sealed interface: när ska de användas” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Kotlin Academy, inklusive ”sealed class kontra sealed interface: när ska de användas”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Kotlin Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”sealed class kontra sealed interface: när ska de användas”?

Förstå skillnaden mellan sealed classes och sealed interfaces i Kotlin. Ni övar på Kotlin Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Kotlin Academy?

Du behöver inga förkunskaper. Utbildningen i Kotlin Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”sealed class kontra sealed interface: när ska de användas”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Kotlin Academy-lektionen?

Ja. Varje Kotlin Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. sealed class kontra sealed interface: när ska de användas
  2. Uttömmande when med sealed-hierarkier
  3. Modellera UI-tillstånd med sealed classes
  4. Nästla och kombinera sealed-hierarkier
← Tillbaka till Kotlin Academy