(Этот вопрос задается в контексте Android, но отвечает только со знанием Kotlin.)
(Кроме того, я нашел некоторые ответы в SO на тот же вопрос в Java8 Lambda, но не могу найти одинотносительно Kotlin.)
Как и многие другие - сейчас я использую RxJava
с Retrofit
для сетевых вызовов.
И недавно я перешел на использование Kotlin.
IЯ объявил мой собственный Observer
для централизации обработки ошибок.
Это мой APIResponseObserver<T> extends Observer<T>
: (упрощенный)
abstract class APIResponseObserver<T> : Observer<T> {
constructor(fragment: BaseFragment) : super(fragment)
constructor(activity: BaseActivity) : super(activity)
override fun onSubscribe(d: Disposable) {
fragment?.addToCompositeDisposable(d)
activity?.addToCompositeDisposable(d)
}
override fun onError(e: Throwable) {
val fm = if (activity == null) fragment?.childFragmentManager else activity?.supportFragmentManager
if (e is APIManager.APIException && e.message != null) {
fm?.showSimpleTextDialog(e.message!!)
} else {
val errorMsg = if (activity == null) fragment?.getString(R.string.network_error) else activity?.getString(R.string.network_error)
errorMsg?.let {
fm?.showSimpleTextDialog(it)
}
}
}
override fun onComplete() {
}
}
Как видите, только onNext()
не переопределяется.
И вот как я использую его сейчас:
APIManager.getSomeBoolean().subscribe(object : APIResponseObserver<Boolean>(this) {
override fun onNext(t: Boolean) {
if (context == null) return
//Do something with the boolean
}
})
После использования недели Kotlin, вышеупомянутое использование действительно кажется мне неуклюжим.
Чего я ожидаю от использования лямбдыкак показано ниже:
APIManager.getSomeBoolean().subscribe(APIResponseObserver<Boolean>(this) {t: Boolean
if (context == null) return
//Do something with the boolean
})
Чтобы мне не нужно было писать object :
, а также override fun onNext(t: Boolean) {
.
Но возможно ли это?Если да, то как мне этого добиться?