最近,我看到RxJava
article解释了Transformers
,并重点介绍了如何将其用于重用Schedulers
。我尝试使用它并在同一个类中,这个方法工作正常:
<T>Observable.Transformer<T, T> applySchedulers() {
return new Observable.Transformer<T, T>() {
@Override
public Observable<T> call(Observable<T> observable) {
return observable
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
我想用静态方法将它移动到一个帮助器类中,这样我就可以在我的整个Android
应用程序中使用它。但是当我尝试使用这个类的方法时
public class RxFunctions {
public static <T>Observable.Transformer<T, T> applySchedulers() {
return new Observable.Transformer<T, T>() {
@Override
public Observable<T> call(Observable<T> observable) {
return observable
.subscribeOn(Schedulers.io())
.unsubscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
};
}
}
在另一个班级里面
public void requestLoginState() {
restClient.requestLoginState()
.compose(RxFunctions.applySchedulers())
.subscribe(new TimberErrorSubscriber<LoginStateResponse>() {
@Override
public void onCompleted() {
}
...
它将不再识别我的Subscriber
,错误:Cannot resolve method 'subscribe(anonymous com.example.util.rx.TimberErrorSubscriber<com.example.network.retrofit.response.login.LoginStateResponse>)'
我在没有Java8
的情况下使用Retrolambda
。
将撰写行更改为
.compose(this.<LoginStateResponse> RxFunctions.applySchedulers())
导致LoginState类型出现Reference parameters are not allowed here
我对RxJava
相当新,并对任何建议表示感谢。
答案 0 :(得分:6)
编辑:现在Android执行support java 8
你说你在android上使用Java8,但android不支持Java8而没有像retrolambda这样的插件,所以我假设你实际上是用Java6编译的(因为Java7只适用于KitKat及以上版本)。
在这种情况下,您可能需要明确applySchedulers
的参数类型。我相信你在编写this.<LoginStateResponse>
时尝试这样做,但只有当你的泛型方法在你当前的类中时才会这样做。
在您的情况下,您实际需要的是在静态方法调用上指定类型:
.compose(RxFunctions.<LoginStateResponse>applySchedulers())