Sobes.tech
Junior — Middle

В кои случаи и къде може да се обявят подкласове, ако класът е маркиран като sealed?

sobes.tech AI

Отговор от AI

В Kotlin, клас, обозначен като sealed, ограничава йерархията на наследяване: всички подкласове на този клас трябва да бъдат обявени в същия файл като самия sealed клас. Това позволява на компилатора да знае пълния набор от наследници и да ги използва, например, в изрази when без необходимостта да се пише клон else.

Тоест, подкласовете на sealed класа могат да бъдат обявени:

  • В същия файл, където е обявен sealed клас.
  • Вътре в самия sealed клас (вложени класове).

Пример:

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

Или

sealed class Result

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

Но всички тези подкласове трябва да се намират в един и същи файл с sealed класа. Това ограничение помага за осигуряване на типова безопасност и пълнота на проверките.