Если вы используете запечатанные классы с when
, угрозами Котлина when
иначе, если вы используете его как выражение, чем если вы используете его как выражение .
Например, этофрагмент кода, когда я использую 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
в качестве выражения), просто хочу выполнить код, который возвращает Unit
для каждой ветви when
, но я хочу иметь поведение, при котором Kotlin будетвыдает ошибку во время компиляции, если я не использовал все подтипы запечатанного класса в операторе when
? Единственный вариант - использовать фиктивную переменную, поэтому я заставляю выражение when
быть выражением, даже если мне плевать на результат? Любой другой способ добиться такого поведения (проверка во время компиляции, если проверены все случаи), возможно без when
?