2

だから私は単純なコールバッククラスを持っています:

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)?に明示的に使用される null 許容型があります。?.invoke()

期待しているように見えるのは

else -> callback?.onError?.invoke(reason)

その理由がよくわかりません。nullではないという事実callbackは、null 以外のonError関数が存在しなければならないことを導き出すのに十分ではないでしょうか?

けがに侮辱を加えるために、私が書くなら

else -> callback?.let{it.onError(reason)}

その後、それを受け入れますが、そうすべきだと警告する前ではありません

冗長な.let呼び出しを削除

4

1 に答える 1