如何通过Java Lambda重写它?
此问题与“ Lambda表达式和通用方法”问题不同。问题是由于引发异常。
public Observable<String> getUserInfo() {
return Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
try {
emitter.onNext( getPlayerInfo());
emitter.onComplete();
} catch (Exception e) {
emitter.onError(e);
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
当我通过普通的Lambda重写此代码时,会出现此错误:
不兼容的类型:必需:可观察的
。发现: 可观察的 。
这是我尝试的:
public Observable<String> getUserInfo() {
return Observable.create( emitter -> {
try {
emitter.onNext(getPlayerInfo();
emitter.onComplete();
} catch (Exception e) {
emitter.onError(e);
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
答案 0 :(得分:3)
编译器的推理引擎无法确定Observable
的类型参数,因此您需要明确指定它:
return Observable.<String>create( emitter -> {
答案 1 :(得分:1)
类型推断失败的原因特别是由于对subscriptionOn和observeOn的跟踪调用。另一个解决方案是引入中间方法或变量,例如:
private Observable<String> getUserInfo() {
Observable<String> userInfo = Observable.create( emitter -> {
try {
emitter.onNext(getPlayerInfo();
emitter.onComplete();
} catch (Exception e) {
emitter.onError(e);
}
});
return userInfo
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}