Sealed interfaces ограничивают все реализации предопределённым набором в одном модуле. Это позволяет компилятору знать все возможные реализации на этапе компиляции, что даёт возможность использовать исчерпывающие выражения when без ветки else.
Самое значительное преимущество над sealed classes — то, что sealed interfaces поддерживают множественное наследование. Один класс может одновременно реализовать несколько sealed interfaces, чего sealed classes не позволяют.
sealed interface Shape
sealed interface Drawable
class Circle : Shape, Drawable
class Square : Shape
whenwhensealed interface Shape
class Circle : Shape
class Square : Shape
fun describe(shape: Shape) = when (shape) {
is Circle -> "It's a circle"
is Square -> "It's a square"
// else не нужен — компилятор знает все подтипы
}
Sealed интерфейс позволяет одному классу одновременно реализовать несколько sealed интерфейсов, в то время как sealed класс допускает только одиночное наследование.
Новый — ещё не проверен сообществом
Вы