2

我有一个名为的简单结果类Outcome,它是密封的,由三个子类组成WaitingSuccessFailure

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,我已经用一个全新的项目进行了尝试,并得到了相同的结果。

4

1 回答 1

1

自从升级到 Kotlin 1.5(特别是)后,这个问题现在已经得到纠正,202-1.5.0-release-764-AS8194.7所以看起来它一定只是一个推理错误。

于 2021-05-05T22:45:25.870 回答