【发布时间】:2019-07-15 17:29:24
【问题描述】:
所以我有一个简单的回调类:
class Callback<T>(
val onResponse: (T) -> Unit,
val onError:(Throwable)->Unit
)
现在我想实现一个处理错误的方法。可能有也可能没有需要调用的callback。
private fun handleServerError(error:IServerError, callback:Callback<*>? = null){
val reason = error.cause
when(reason){
is Because.ServerRejectsLogin -> {
doAsync { uiThread { mainActivity.longToast("sorry, your session timed out. please log in again.") } }
IntentManager.doLogin(mainActivity)
}
else -> callback?.onError(reason)
}
}
这给我一个错误:
引用具有可空类型
((Throwable) -> Unit)?使用显式?.invoke()进行类似函数的调用,而不是
似乎期待的是
else -> callback?.onError?.invoke(reason)
我不太明白为什么。 callback 不为空这一事实是否足以推导出必须有一个非空的onError 函数?
雪上加霜,如果我写的话
else -> callback?.let{it.onError(reason)}
然后它接受了,但不是在警告我应该这样做之前
删除多余的
.let调用
【问题讨论】:
-
Shouldn't the fact that callback is not null be sufficient to derive that there must be a non-null onError function?在您的情况下,您将callback标记为可为空,因此它可能为空
标签: lambda kotlin callback type-inference kotlin-null-safety