Во что Sealed Class конвертируется в JVM

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

Ответ

Sealed class в Kotlin компилируется в abstract class в JVM байткоде с некоторыми дополнительными метаданными.

Ключевые особенности:

  1. Класс помечается модификатором abstract
  2. Добавляется аннотация @Metadata с информацией о sealed-иерархии
  3. Все подклассы должны находиться в том же пакете (это проверяется во время компиляции)

Пример:

// Kotlin
sealed class Result
class Success : Result()
class Error : Result()

Будет скомпилировано примерно так:

// Декомпилированный Java-код
public abstract class Result {
    private Result() {}
}

public final class Success extends Result {
    public Success() {}
}

public final class Error extends Result {
    public Error() {}
}