最近我看到一篇RxJava文章解释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());
}
};
}
Run Code Online (Sandbox Code Playgroud)
我想用静态方法将它移动到一个帮助器类中,这样我就可以在我的整个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());
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个班级里面
public void requestLoginState() {
restClient.requestLoginState()
.compose(RxFunctions.applySchedulers())
.subscribe(new TimberErrorSubscriber<LoginStateResponse>() {
@Override
public void onCompleted() {
}
...
Run Code Online (Sandbox Code Playgroud)
它将不再识别我的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())
Run Code Online (Sandbox Code Playgroud)
导致LoginState类型的错误说明 Reference parameters are not allowed here
我很新,RxJava对任何建议都很感激.
编辑:现在Android确实支持java 8
你说你在android上使用Java8,但android不支持Java8而没有像retrolambda这样的插件,所以我假设你实际上正在使用Java6进行编译(因为Java7仅适用于KitKat及以上版本).
在这种情况下,您可能需要明确您的参数类型applySchedulers.我相信你在编写时试图这样做this.<LoginStateResponse>,但只有当你的泛型方法在你当前的类中时才会起作用.
在您的情况下,您实际需要的是在静态方法调用上指定类型:
.compose(RxFunctions.<LoginStateResponse>applySchedulers())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |