sealed密封类
使用场景:增强版的枚举类型,不同之处在于枚举的实例是唯一的,而密封类可以有很多实例(如下TestA实例是唯一的,而TestB则可以创建多个实例)
sealed class Test {
object TestA : Test()
class TestB(value: String) : Test()
}
private fun test(t: Test) = when(t){
Test.TestA ->{}
is Test.TestB -> {}
}
private fun test(t1: Test, t2: Test){
val result = when(t1){
Test.TestA -> {}
is Test.TestB -> {}
}
}
注:
(1)子类要在封装类内部声明(不在同一个文件中无法继承密封类,同一文件不再内部可以继承但不建议)
(2)无构造参数的子类由于实例唯一,可以直接通过对象方式判断是否相等,无需is
(3)使用时尽量如上文对when赋值,便于后期再添加新类,编译的时候就会失败,避免遗漏对新类型的处理(如果不是赋值方式,则不会编译失败)