Где можно объявлять sealed class

«Где можно объявлять sealed class» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Sealed class можно объявлять на верхнем уровне (вне других классов) или внутри другого класса, но не внутри функций. Вложенные sealed-классы должны быть объявлены как inner.

Пример:

// Верхний уровень
sealed class Result<out T>

// Внутри класса
class ApiClient {
    sealed class Response
}

// Ошибка - нельзя внутри функции
fun foo() {
    sealed class LocalResult // Compiler error
}

Ключевые ограничения:

  1. Все подклассы должны быть объявлены в том же файле (для top-level) или в том же классе (для вложенных)
  2. Конструктор всегда protected (по умолчанию) или private