Birincisi, böyle bir yardımcı uzantısı yöntemi oluşturmak:
fun<T, R> Observable<T>.subscribe(
receiver: R,
onSuccess: R.(T) -> Unit,
onFailure: R.(Throwable) -> Unit) {
subscribe({ receiver.onSuccess(it) }, { receiver.onFailure(it) })
}
Şimdi böyle yeni yöntemi kullanabilirsiniz:
AppObservable.bindActivity(this, api.get(id)).subscribe(this, ::onSuccess, ::onFailure)
::
operatör bir yöntemdir referans oluşturur. KT-6947 çözüme kavuşturulacağını sonra, yardımcı yöntem ihmal ve doğrudan subscribe(this::onSuccess, this::onFailure)
yazabilir.
fun <T, R, E> T.bind(reference: T.(R) -> E): (R) -> E = { this.reference(it) }
ve bu gibi kullanmak:
Bu bizim alternatif bir uzantısı yöntemine bir alıcı bağlayan aşağıdaki yardımcı yöntemi uygulayabilir Bu soruna geçici bir çözüm için Java 8.
zaten mümkün
AppObservable.bindActivity(this, api.get(id)).subscribe(bind(Foo::onSuccess), bind(Foo::onFailure))
ama bu pek daha şık başlangıçtaki çözümüne kıyasla.
Edit1: Eğer Foo
sınıf adıdır 'Foo :: onSuccess' kullanmak zorunda
Thy sözdizimi ::onSuccess
şimdilik yasaktır.
EDIT2:
Sen Sonra
operator fun <T, R, E> T.plus(reference: T.(R) -> E): (R) -> E = { this.reference(it) }
aynı yöntem bildirerek operatör aşırı yüklenmesi ile biraz eğlenmek olabilir bunu gibi kullanabilirsiniz:
AppObservable.bindActivity(this, api.get(id)).subscribe(this + Foo::onSuccess, this + Foo::onFailure)