Sobes.tech
Junior — Middle

W jakich przypadkach i w jakim miejscu można zadeklarować podklasy, jeśli klasa jest oznaczona jako sealed?

sobes.tech AI

Odpowiedź od AI

W Kotlinie klasa oznaczona jako sealed ogranicza hierarchię dziedziczenia: wszystkie podklasy takiej klasy muszą być zadeklarowane w tym samym pliku co sama klasa sealed. Pozwala to kompilatorowi znać pełny zestaw dziedziczących i używać tego, na przykład, w wyrażeniach when bez konieczności pisania gałęzi else.

Czyli podklasy klasy sealed można deklarować:

  • W tym samym pliku, w którym zadeklarowano klasę sealed.
  • Wewnątrz samej klasy sealed (klasy zagnieżdżone).

Przykład:

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

Lub

sealed class Result

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

Ale wszystkie te podklasy muszą znajdować się w tym samym pliku co klasa sealed. To ograniczenie pomaga zapewnić bezpieczeństwo typów i pełność sprawdzeń.