【发布时间】:2021-04-14 15:52:22
【问题描述】:
我有一个名为Outcome 的简单结果类,它是密封的,由三个子类组成: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'表达式建议详尽,添加'is Failure'、'is Success'、'Waiting'分支或'else'分支
但是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 插件和 Kotlin 版本的版本。也许修复了一个错误,并且您的 IntelliJ IDE 具有更新的插件,或者该项目正在使用更高版本的 Kotlin。
-
感谢您检查@Tenfour04,我实际上有
1.4.32-release-Studio4.1-1用于Android Studio 和1.3.72-release-IJ2020.1-5。你有相同的 Android Studio 插件吗? -
我使用了 Kotlin 1.4.21 版本来检查它。
-
奇怪,我用 1.4.21 尝试了一个新项目,但仍然收到相同的警告。
-
在使用
ArcticFox 2020.3.1 Patch 3和 Kotlin 插件203-1.5.31-release-550-AS7717.8时遇到相同的错误。只有 lint.isWarningsAsErrors = true 才会让人讨厌。
标签: android android-studio kotlin compiler-warnings sealed-class