Можно ли сделать sealed class внутренним в Kotlin

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

Ответ

Да, sealed class можно сделать внутренним (inner) в Kotlin, но с ограничениями. Внутренний sealed class должен быть объявлен внутри другого класса и все его подклассы должны находиться в том же файле. Это связано с тем, что sealed class требует, чтобы все его наследники были известны на этапе компиляции.

Пример:

class Outer {
    inner sealed class Result {
        class Success(val data: String) : Result()
        class Error(val message: String) : Result()
    }
}

Ограничения:

  1. Все подклассы должны быть объявлены в том же файле
  2. Нельзя объявлять подклассы вне файла, где объявлен sealed class
  3. Внутренний sealed class имеет доступ к членам внешнего класса через this@Outer