Kotlin嵌套在
我有下一个密码。正如您可能看到的,当一个Kotlin嵌套在,kotlin,Kotlin,我有下一个密码。正如您可能看到的,当一个在另一个中时,有3个。是否有可能将此代码展平?我想买些包装纸,但买不到。目前,我看到的唯一解决方案是将每个when移动到fun中,比如processFirstWhen等。也许有一个更干净的解决方案。谢谢你的帮助 when (val result = callback.invoke()) { is DataCompletable.Success -> DomainCompletable.Success i
在另一个中时,有3个。是否有可能将此代码展平?我想买些包装纸,但买不到。目前,我看到的唯一解决方案是将每个when移动到fun
中,比如processFirstWhen
等。也许有一个更干净的解决方案。谢谢你的帮助
when (val result = callback.invoke()) {
is DataCompletable.Success -> DomainCompletable.Success
is DataCompletable.Error ->
when (result.error) {
is DataError.Unauthorized ->
when (tokenMixIn.refresh()) {
is DomainCompletable.Success -> execute(
currentNumberOfRetries + 1,
callback
)
is DomainCompletable.Error -> DomainCompletable.Error(DomainError.RefreshFailed)
}
else -> DomainCompletable.Error(result.error.mapToDomain())
}
轻松点!但在
时不使用
我想用if
的扁平层次结构来代替它
像这样:
val result = callback.invoke()
if(result is DataCompletable.Success) return DomainCompletable.Success
val error = result.error
if(error !is DataError.Unauthorized) return DomainCompletable.Error(result.error.mapToDomain())
val refreshResult = tokenMixIn.refresh()
if(refreshResult is DomainCompletable.Error) return DomainCompletable.Error(DomainError.RefreshFailed)
execute(currentNumberOfRetries + 1, callback)
这里的关键是短路。我们会尽快返回结果。但我们也实现了更平坦、更容易理解的代码。是否可以从库中获取DomainCompletable、DataCompletable和DataError?@Tenfour04不,它们是我的类看起来您的类层次结构和设计强制使用嵌套语句,但我不能在不了解其工作原理的情况下提出任何建议。我们可以从中创建两个对象吗?我指的是一个负责回调调用的对象,另一个负责处理您案例中的错误场景。error对象将仅在某些先决条件下调用,我正在讨论这些tokenMixIn.refresh()。根据这个值,我不确定它会做什么,但根据这些值,它将移动到下一层。