我先翻译为密封类吧O__O "…。
什么是密封类?
官方文档:密封类用于表示受限类的层次结构,当一个值有一个有限的类型,但不能有任何其他类型。它们在某种意义上是枚举类的扩展:枚举类型的值的集合也受到限制,但是每个枚举常量只能作为一个单独的实例存在,而一个密封类的子类可以有多个可以包含状态的实例。
如何声明密封类?
只需要在class前面添加关键字sealed
sealed class Person{
data class YellowPerson(val name:String):Person()
data class WhitePerson(val name:String,age:Int):Person()
object BlackCat:Person()
}
当在表达式中使用它们时,密封类的便捷就会体现出来。如果需要验证语句是否涵盖所有的情况,则不需要在语句中添加else。
fun name(person:Person):String=when(person){
is Person.YellowPerson->person.name
is Person.WhitePerson->person.name+person.age
Person.BlackCat->Not A Person
}