使用密封类,您可以使用详尽的 when
表达式,并在表达式返回结果时省略 else
子句:
sealed class SealedClass {
class First : SealedClass()
class Second : SealedClass()
}
fun test(sealedClass: SealedClass) : String =
when (sealedClass) {
is SealedClass.First -> "First"
is SealedClass.Second -> "Second"
}
现在,如果我将 Third
添加到 SealedClass
,编译器会提示 test() 中的
并不详尽,我需要为 when
表达式Third
或 else
添加一个子句。
我想知道当 test()
不返回任何内容时是否也可以强制执行此检查:
fun test(sealedClass: SealedClass) {
when (sealedClass) {
is SealedClass.First -> doSomething()
is SealedClass.Second -> doSomethingElse()
}
}
如果添加了 Third
,此代码段不会中断。
我可以在 when
之前添加一个 return
语句,但是如果其中一个子句的返回类型不是 Unit
,这很容易被遗忘并且可能会中断>.
如何确保不会忘记在 when
子句中添加分支?
最佳答案
强制穷举when
的方法是通过使用它的值使其成为一个表达式:
sealed class SealedClass {
class First : SealedClass()
class Second : SealedClass()
class Third : SealedClass()
}
fun test(sealedClass: SealedClass) {
val x = when (sealedClass) {
is SealedClass.First -> doSomething()
is SealedClass.Second -> doSomethingElse()
} // ERROR here
// or
when (sealedClass) {
is SealedClass.First -> doSomething()
is SealedClass.Second -> doSomethingElse()
}.let {} // ERROR here
}
https://stackoverflow.com/questions/38169933/
相关文章:
properties - Kotlin 中是否有 didSet/willSet 模拟?
java - 为什么在 Java 中实现返回 Unit 的 Kotlin 函数时必须返回 Unit.
android - 这种类型有一个构造函数,必须在这里初始化 - Kotlin
android - Android 中的 AsyncTask 与 Kotlin
android - 如何在 kotlin 中使用 Android Support typedef 注
android - Unresolved reference DaggerApplicationCo
android - kotlin 和 ArgumentCaptor - IllegalStateEx