在Android Studio中如果使用了密封类,在使用when语句时会出现如下错误:
when without else branch
这是因为Android Studio无法判断在密封类中定义的所有子类是否已被覆盖。为了解决这个问题,我们需要添加一个else分支来覆盖所有未被显式处理的子类。例如:
sealed class MySealedClass {
object FirstObject : MySealedClass()
object SecondObject : MySealedClass()
object ThirdObject : MySealedClass()
}
fun test(sealedClass: MySealedClass) {
when (sealedClass) {
MySealedClass.FirstObject -> println("FirstObject")
MySealedClass.SecondObject -> println("SecondObject")
MySealedClass.ThirdObject -> println("ThirdObject")
else -> throw IllegalArgumentException("Unknown sealed class")
}
}
通过添加else分支,我们告诉Android Studio这个when语句已经覆盖了密封类中的所有子类,消除了编译器的警告。