Какие знаешь конструкторы у Sealed Class

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

Ответ

Sealed class в Kotlin может объявляться с разными конструкторами:

  1. Primary конструктор (может быть private или protected):
sealed class Result<out T>(val data: T?)
  1. Вторичные конструкторы (только внутри sealed class):
sealed class Result<out T> {
    constructor(data: T?) : this(data)
    constructor() : this(null)
}
  1. Конструкторы у наследников (могут быть любыми):
class Success<T>(data: T) : Result<T>(data)
class Error(val exception: Exception) : Result<Nothing>(null)

Важно: сам sealed class не может быть инстанциирован, но его наследники - могут. Конструкторы sealed class по умолчанию protected, но можно сделать private.