Какие отличия существуют между Sealed Interface и Sealed Class в Kotlin?
Ответ от нейросети
sobes.tech AI
В Kotlin sealed class и sealed interface используются для ограничения иерархии наследования, позволяя объявить фиксированный набор подклассов или реализаций, известных на этапе компиляции.
Основные отличия:
-
Sealed Class — это класс, который может иметь ограниченное число подклассов. Все подклассы должны быть объявлены в том же файле, что и sealed класс (или в его пределах). Это удобно для реализации иерархий с ограниченным числом вариантов, например, для выражения состояний или событий.
-
Sealed Interface — аналогично sealed классу, но для интерфейсов. Позволяет объявить интерфейс с ограниченным числом реализаций. Это полезно, когда нужно описать поведение, которое могут реализовывать разные классы, но при этом ограничить их набор.
Пример:
sealed class Result {
data class Success(val data: String) : Result()
object Error : Result()
}
sealed interface Shape
class Circle(val radius: Double) : Shape
class Rectangle(val width: Double, val height: Double) : Shape
Таким образом, sealed class подходит, когда нужна базовая реализация с состояниями, а sealed interface — когда важна контрактная часть с ограниченным числом реализаций. Оба помогают компилятору проверять полноту when выражений и обеспечивают безопасность типов.