如果您将密封类与when
,Kotlin threats when
differently if you use it as expression than if you use it as a statement一起使用。
例如,当我使用when
作为语句时,这段代码是有效的:
sealed class SomeType
object Foo: SomeType()
object Bar: SomeType()
fun test(input: SomeType) {
when(input) {
is Foo -> {}
}
}
但是当我使用它作为表达式时,并不是因为when
期望else
分支,或者因为代码检查了SomeType
的所有子类型,其中Bar
示例代码中缺少:
sealed class SomeType
object Foo: SomeType()
object Bar: SomeType()
fun test(input: SomeType) {
var result = when(input) {
is Foo -> {}
}
}
此设计决定背后的原因是什么?
我的问题是,如果我不在乎结果(不想使用when
作为表达式),而只想执行一些为每个{{ 1}}分支,但是如果我没有在Unit
语句中使用所有密封类的子类型,我想让Kotlin在编译时抛出错误吗?我唯一的选择是使用虚拟变量,因此即使我不在乎结果,我也强制when
语句为表达式。还有其他方法可以实现这种行为(如果检查了所有情况,则进行编译时检查),也许没有when
?