何为密封类?
从文档得知:密封类用于表示受限类层次结构,此时值可以具有来自受限集的类型之一,但不能具有任何其他类型。从某种意义上说,它们是枚举类的扩展:枚举类型的值集也受到限制,但每个枚举常数仅作为单个实例存在,而密封类的子类可以具有多个实例,这些实例可以包含状态。
如何声明 sealed class?
只要在类名前加sealed修饰符。1
2
3
4
5
6
7sealed class Car {
data class Maruti(val speed: Int) : Car()
data class Bugatti(val speed: Int, val boost: Int) : Car()
object NotACar : Car()
}
当您在when表达式中使用密封类时,使用它们的关键好处就发挥了作用。如果验证语句覆盖所有情况,则不需要向语句中添加else子句。
1 | fun speed(car: Car): Int = when (car) { |
所以,当你遇到类似场景,考虑使用密封类。