最近我看到一个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
还很陌生并感谢任何建议。
最佳答案
编辑:现在 Android 做 support java 8
你说你在 android 上使用 Java8,但 android 不支持 Java8 没有像 retrolambda 这样的插件,所以我假设你实际上是用 Java6 编译的(因为 Java7 只适用于 KitKat 及更高版本)。
在这种情况下,您可能需要明确 applySchedulers
的参数类型.我相信你在写 this.<LoginStateResponse>
时曾尝试这样做,但这只有在您的通用方法在您当前的类中时才有效。
在您的情况下,您实际需要的是在静态方法调用中指定类型:
.compose(RxFunctions.<LoginStateResponse>applySchedulers())
关于android - 带有转换器的 Rxjava 静态通用实用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243785/