Android Studio 无法识别 when 语句对于密封 class
Android Studio not recognising that a when statement is exhaustive with a sealed class
我有一个名为 Outcome
的简单结果 class,它是密封的,由三个子 class 组成:Waiting
、Success
和 Failure
:
sealed class Outcome<out T> {
object Waiting : Outcome<Nothing>()
class Success<T>(val data: T) : Outcome<T>()
open class Failure : Outcome<Nothing>()
}
现在我想使用 when
语句来检查泛型 Outcome
是哪种类型,但是 Android Studio(特别是 Android Studio,IntelliJ IDEA 没有'有这个问题)似乎认为它并不详尽并发出警告:
'when' expression on sealed classes is recommended to be exhaustive, add 'is Failure', 'is Success', 'Waiting' branches or 'else' branch
然而 when
绝对 是 详尽的:
when (o) {
is Outcome.Failure -> TODO()
is Outcome.Success -> TODO()
Outcome.Waiting -> TODO()
}
甚至当我要求添加剩余的分支时,它只是添加了我已经拥有的分支的副本并且仍然产生相同的错误:
when (o) {
is Outcome.Failure -> TODO()
is Outcome.Success -> TODO()
Outcome.Waiting -> TODO()
is Outcome.Failure -> TODO()
is Outcome.Success -> TODO()
Outcome.Waiting -> TODO()
}
这不是一个大问题,因为它只是一个警告,不会导致任何实际问题。但是我想知道这是推理错误还是与我的设计有关。
注意:我的 Android Studio 插件版本是 1.4.32-release-Studio4.1-1,我在一个全新的项目中尝试过这个,得到了相同的结果。
自从升级到 Kotlin 1.5(特别是 202-1.5.0-release-764-AS8194.7
)后,此问题现已得到纠正,因此看起来它一定只是一个推理错误。
我有一个名为 Outcome
的简单结果 class,它是密封的,由三个子 class 组成:Waiting
、Success
和 Failure
:
sealed class Outcome<out T> {
object Waiting : Outcome<Nothing>()
class Success<T>(val data: T) : Outcome<T>()
open class Failure : Outcome<Nothing>()
}
现在我想使用 when
语句来检查泛型 Outcome
是哪种类型,但是 Android Studio(特别是 Android Studio,IntelliJ IDEA 没有'有这个问题)似乎认为它并不详尽并发出警告:
'when' expression on sealed classes is recommended to be exhaustive, add 'is Failure', 'is Success', 'Waiting' branches or 'else' branch
然而 when
绝对 是 详尽的:
when (o) {
is Outcome.Failure -> TODO()
is Outcome.Success -> TODO()
Outcome.Waiting -> TODO()
}
甚至当我要求添加剩余的分支时,它只是添加了我已经拥有的分支的副本并且仍然产生相同的错误:
when (o) {
is Outcome.Failure -> TODO()
is Outcome.Success -> TODO()
Outcome.Waiting -> TODO()
is Outcome.Failure -> TODO()
is Outcome.Success -> TODO()
Outcome.Waiting -> TODO()
}
这不是一个大问题,因为它只是一个警告,不会导致任何实际问题。但是我想知道这是推理错误还是与我的设计有关。
注意:我的 Android Studio 插件版本是 1.4.32-release-Studio4.1-1,我在一个全新的项目中尝试过这个,得到了相同的结果。
自从升级到 Kotlin 1.5(特别是 202-1.5.0-release-764-AS8194.7
)后,此问题现已得到纠正,因此看起来它一定只是一个推理错误。