根据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 ->
“其他错误”)。这是正确的方法吗?