当我使用密封类时,为什么会出现不兼容类型错误:Result.Error 和 Result<List<MInfo>>?

问题描述 投票:0回答:1

我无法编译代码A,


我收到该行的以下错误

is Result.Success -> { }

需要一个类型的参数。如果您不想传递类型参数,请使用“成功<>”*


我收到该行的以下错误

is Result.Error -> { }

不兼容的类型:Result.Error 和 Result


我该如何解决?

顺便说一句,如果我用

is Result.Success -> { }
替换
is Result.Success<*> -> { }

我会收到以下警告:

检查实例总是“假”

代码A

override suspend fun translateInBackground() {
    val listIncompleted = handleMInfo.listIncompleted()
    listIncompleted
        .flowOn(Dispatchers.IO)
        .collect {          
            when(it){
                is Result.Success   -> { }
                is Result.Error     -> { }
                is Result.Loading   -> { }
            }
        }
}


sealed class Result<out R> {
    data class  Success<out T>(val data: T) : Result<T>()
    data class  Error(val exception: Exception) : Result<Nothing>()
    object      Loading : Result<Nothing>()
}

override fun listIncompleted(): Flow<Result<List<MInfo>>> {
     return  mInfoRepository.listIncompleted()
}
kotlin flow kotlin-sealed
1个回答
0
投票

您错误地设置了

Result
类型层次结构。您希望能够返回
Result<T>
,即使它是
Loading
Error

对于

Error
,直接将类型参数传下去,不要使用。对于
Loading
,如果将其设为数据类,则可以执行相同的操作,或者如果希望它保持为单例,则需要进行一些(安全的)转换。

© www.soinside.com 2019 - 2024. All rights reserved.