簡體   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