Ответ
Sealed Interface и Sealed Class ограничивают иерархию, но с ключевыми отличиями:
-
Sealed Class:
- Может содержать состояние (поля, свойства).
- Поддерживает конструкторы (open/abstract/final).
- Пример:
sealed class Result { data class Success(val data: String) : Result() data class Error(val message: String) : Result() }
-
Sealed Interface:
- Не может хранить состояние (только объявления функций).
- Позволяет множественное наследование (класс может реализовать несколько sealed интерфейсов).
- Пример:
sealed interface ApiResult class Success : ApiResult class Error : ApiResult
Когда использовать: Sealed Class для иерархии с общим состоянием, Sealed Interface для контрактов без состояния или множественного наследования.