繁体   English   中英

意外的奇怪错误 Kotlin “密封” class 与“何时”一起使用

[英]Unexpected Weird Error Kotlin “Sealed” class usage with 'when'

我遇到了一个非常奇怪的错误 - kotlin 用 when 密封 class

这是我的密封 class

sealed class Resource<out T : Any> {
object Loading : Resource<Nothing>()
data class Success<out T : Any>(val data: T) : Resource<T>()
data class Error(val exception: Exception) : Resource<Nothing>()
data class GenericError(val errorResponse: ErrorResponse) : Resource<Nothing>()
}

这是我当 class

   when (resource) {
                is Resource.Loading -> {
                }
                is Resource.Error -> {
                    
                }
                is Resource.GenericError -> {
                 
                }
                is Resource.Success -> {
                   //some code - working fine
                   // additional code - weird error pops up
                }
            }

它工作正常,但是当编译器抱怨,我在一个块内添加了一个新行

'when' 表达式必须是详尽的,添加必要的 'null' 分支或 'else' 分支

您可能会说,错误很明显,只需添加一个else分支。 但这似乎是错误的,因为在密封的 class 中,不会有其他情况,即else分支永远不应该执行。 文档还说

如果可以验证语句涵盖所有情况,则无需在语句中添加 else 子句。

添加 else 分支将起作用,错误消失。 但我想知道这背后的原因,为什么编译器突然弹出错误,当我添加额外的代码行时,但之前工作正常。

似乎resource可以为空,这就是编译器需要添加'null' branch or 'else' branch的原因

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM