Sobes.tech
Junior — Middle

V jakých případech a na jakém místě lze deklarovat podtřídy, pokud je třída označena jako sealed?

sobes.tech AI

Odpověď od AI

V Kotlinu omezená třída sealed omezuje dědičnou hierarchii: všechny podtřídy této třídy musí být deklarovány ve stejném souboru jako samotná třída sealed. To umožňuje překladači znát úplný počet dědiců a používat je například ve výrazech when bez nutnosti psát větev else.

To znamená, že podtřídy třídy sealed lze deklarovat:

  • Ve stejném souboru, ve kterém je deklarována třída sealed.
  • Uvnitř samotné třídy sealed (vnořené třídy).

Příklad:

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

Nebo

sealed class Result

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

Ale všechny tyto podtřídy musí být ve stejném souboru jako třída sealed. Tato omezení pomáhají zajistit typovou bezpečnost a úplnost kontrol.