Edited at

Kotlinで複数メソッドを持つInterfaceを実装する

More than 1 year has passed since last update.


概要

KotlinでRetrofit2を使ったAPI実行を試していて

enqueueでCallbackを実装するときに

onResponseとonFailureの二つのメソッドを持っていてハマったのでメモ書きです。


実装

var servie = RetrofitServiceGenerator.createService()

servie.getUser("testuser").enqueue(object: Callback<Users> {
override fun onResponse(call: Call<Users>?, response: Response<Users>?) {
response?.body()?.let {
// 処理
}
}
override fun onFailure(call: Call<Users>?, t: Throwable?) {
t?.let {
// 処理
}
}
})

キモは object: の後に Interfaceの型を書いて overrideでJavaのようにメソッドをoverrideする必要があるということです。

ラムダでは表現できないみたい。

インターフェースの実装だけを抜き出すと以下のように書けます。

var callback = object: Callback<Users> {

    override fun onResponse(call: Call<Users>?, response: Response<Users>?) {
        // 処理
    }

    override fun onFailure(call: Call<Users>?, t: Throwable?) {
        // 処理
    }
}

Swiftのクロージャの方がこの点は直感的で扱いやすいなと思いました。