4

根据Florina Muntenescu的这篇文章,我有两个问题:

问题 1:在以下情况下考虑Respository响应SomeApiResult

sealed class SomeApiResult<out T : Any> {
    object Success : SomeApiResult<Unit>()
    object NoAccount : SomeApiResult<Unit>()
    sealed class Error(val exception: Exception) : SomeApiResult<Nothing>() {
        class Generic(exception: Exception) : Error(exception)
        class Error1(exception: Exception) : Error(exception)
        class Error2(exception: Exception) : Error(exception)
        class Error3(exception: Exception) : Error(exception)
    }
} 

when稍后在我使用时,我ViewModel将无法执行以下操作:

when (result: SomeApiResult) {
    ...
    is SomeApiResult.Error.Error1,
    is SomeApiResult.Error.Error2 -> {
        // it will fail with "Unresolved reference: exception"
        result.exception
    }
    is SomeApiResult.Error.Error3 -> {
        ...
    }
}

我该如何解决这个问题?
这是有效的:

when (result: Result<Int>) {
   ...
   is SomeApiResult.Error -> result.exception.message
}

问题 2:在创建错误响应时,我必须创建一个GenericError,因为如果我尝试实例化,sealed class我会收到一个错误。这就是我让它工作的方式:

is Result.Error ->
    when (result.exception) {
        is Error1 -> SomeApiResult.Error.Error1(result.exception)
        is Error2 -> SomeApiResult.Error.Error2(result.exception)
        ...
        else -> SomeApiResult.Error.Generic(result.exception)
    }

在我的ViewModel我不会查询Error.Generic.
相反,我将使用is SomeApiResult.Error如上所示(如else ->“其他错误”)。这是正确的方法吗?

4

0 回答 0