Gui*_*lhE 5 android kotlin sealed-class
根据 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)
}
}
Run Code Online (Sandbox Code Playgroud)
when后者在 my 中使用时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 -> {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
但这是有效的:
when (result: Result<Int>) {
...
is SomeApiResult.Error -> result.exception.message
}
Run Code Online (Sandbox Code Playgroud)
问题 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)
}
Run Code Online (Sandbox Code Playgroud)
在我的中,ViewModel我不会查询Error.Generic.
相反,我将is SomeApiResult.Error如上所示使用(如else ->“其他错误”)。这是正确的方法吗?
| 归档时间: |
|
| 查看次数: |
612 次 |
| 最近记录: |