Sealed Class
https://kotlinlang.org/docs/sealed-classes.html |
sealed class
Ограничивает возможность наследования от него, позволяя наследоваться только в пределах того же файла или модуля, где он был объявлен. Это дает возможность разработчику контролировать все возможные подтипы данного класса, улучшая поддержку безопасных и предсказуемых конструкций кода.
• Все наследники известны в compile time. Наследование sealed-классов или интерфейсов из разных модулей запрещено. IDE отобразит ошибку.
• Не можем быть создан напрямую, может быть только предком.
• Нельзя присвоить анонимному классу, так как это вычисляется в run time.
• Не могут быть open
inner
.
• Модификатор abstract
является избыточным, поскольку класс sealed
может иметь абстрактные компоненты.
• Можно использовать sealed interface
вместо класса если не нужно передавать параметры в конструктор.
• Под капотом в java - abstract class
.
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val exception: Exception) : Result()
object Loading : Result()
}
sealed interface
Ограничивает количество возможных реализаций, и все они должны быть либо в том же файле, либо в том же модуле, где объявлен интерфейс. Это позволяет разработчику контролировать набор реализаций интерфейса и гарантировать, что никаких неожиданных реализаций добавлено не будет.
sealed interface Shape {
fun area(): Double
}
class Circle(private val radius: Double) : Shape {
override fun area(): Double = Math.PI * radius * radius
}
class Rectangle(private val width: Double, private val height: Double) : Shape {
override fun area(): Double = width * height
}
class Triangle(private val base: Double, private val height: Double) : Shape {
override fun area(): Double = 0.5 * base * height
}
Разница между sealed class и enum class?
sealed class позволяет создавать иерархии с ограниченным набором подклассов и поддерживает наследование, тогда как enum class представляет фиксированный набор констант и не поддерживает наследование.
Разница между sealed class и abstract class?
sealed class ограничивает наследование только подклассами, определёнными в том же файле, и используется для моделирования замкнутых иерархий типов.
abstract class позволяет наследоваться без ограничений и предоставляет общие абстрактные методы для реализации в подклассах.
Разница между sealed interface и interface?
sealed interface ограничивает набор классов, которые могут реализовать этот интерфейс, обеспечивая контроль над всеми реализациями на этапе компиляции. Это позволяет, например, более строго управлять обработкой различных реализаций. В то время как обычный interface не ограничивает количество классов, которые могут его реализовать, что может привести к неожиданным или неуправляемым реализациям.
Разница между sealed class и sealed interface?
sealed class может иметь поля, которые доступны в его подклассах. sealed interface не может содержать поля, только методы.
sealed interface может быть более гибким в некоторых случаях, позволяя интерфейсам определять ограничения, которые могут быть реализованы различными классами, тогда как sealed class имеет более строгую иерархию.
Kotlin Sealed Class. Вопросы на собесе
- Какие преимущества у использования sealed class?
- Какие ограничения наследования есть у sealed class?
- Разница между sealed class и enum?
- Разница между sealed class и sealed interface?
- Разница между sealed interface и interface?
- Разница между sealed class и sealed interface?
- Как sealed class выглядит под капотом в Java?
Как
abstract class
.