![](/img/trans.png)
[英]Sealed class in Kotlin, Incompatible types error cannot return parent type
[英]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.