Sobes.tech
Junior — Middle

Wyjaśnij, czym są zamknięte klasy w Kotlinie i jak są używane

sobes.tech AI

Odpowiedź od AI

W Kotlinie nie ma specjalnego pojęcia "zamkniętych klas" (closed classes) jako odrębnego typu, ale istnieje podobna koncepcja — klasy sealed (zamknięte klasy).

Klasa sealed ogranicza hierarchię dziedziczenia: wszystkie podklasy takiej klasy muszą być zadeklarowane w tym samym pliku. Pozwala to kompilatorowi znać wszystkie możliwe podklasy i używać ich na przykład w wyrażeniach when bez konieczności pisania gałęzi else.

Użycie klas sealed jest wygodne do modelowania ograniczonego zestawu opcji, na przykład stanów lub zdarzeń.

Przykład:

sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

fun handleResult(result: Result) {
    when(result) {
        is Result.Success -> println("Dane: ${result.data}")
        is Result.Error -> println("Błąd: ${result.error.message}")
    }
}

Jeśli przez "zamknięte klasy" rozumie się klasy z modyfikatorem private lub internal, to są to klasy z ograniczonym zakresem widoczności: private — widoczne tylko w pliku, internal — w module.