在RxJava中处理检查异常
问题描述:
我开始掌握RxJava1(现在让我们不进入为什么不是RxJava2)。在RxJava中处理检查异常
我有类似下面的代码:
MoviesAPI.findMovieURLsByType("comedy")
.map(s -> {
try {
return potentialCheckedException(s); //Throws CheckedException
} catch (MyExceptionType ex) {
return Exceptions.propagate(ex);
}
})
.subscribe(new Subscriber<String>() {
public void onCompleted() {
System.out.println("------Completed!-------");
}
public void onError(final Throwable e) {
System.out.println(e.getMessage());
}
public void onNext(final String s) {
System.out.println(s);
}
});
我得到的编译错误如下图所示:
Error:(28, 17) java: no suitable method found for subscribe(<anonymous rx.Subscriber<java.lang.String>>)
method rx.Observable.subscribe(rx.functions.Action1<? super java.io.Serializable>) is not applicable
(argument mismatch; <anonymous rx.Subscriber<java.lang.String>> cannot be converted to rx.functions.Action1<? super java.io.Serializable>)
method rx.Observable.subscribe(rx.Observer<? super java.io.Serializable>) is not applicable
(argument mismatch; <anonymous rx.Subscriber<java.lang.String>> cannot be converted to rx.Observer<? super java.io.Serializable>)
method rx.Observable.subscribe(rx.Subscriber<? super java.io.Serializable>) is not applicable
(argument mismatch; <anonymous rx.Subscriber<java.lang.String>> cannot be converted to rx.Subscriber<? super java.io.Serializable>)
method rx.Observable.<T>subscribe(rx.Subscriber<? super T>,rx.Observable<T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
如果我有说noPotentialCheckedException(s)
删除try-catch块和替换potentialCheckedException(s)
,然后编译错误消失。为什么?我错过了什么?足够使用Exceptions.propagate(ex)
是不是包装CheckedException
?
在此先感谢。
答
Exceptions.propagate
返回RuntimeException
和potentialCheckedException
返回String
我假设。 lambda返回类型推断然后只能找到一个共同的超类型Serializable
,这与一个明确键入的String
订户不兼容。你更可能想要throw Exceptions.propagate(ex)
。
傻我。谢谢@akarnokd。我被困在想知道我在RxJava中失去了什么,当时它实际上归结为Java的基础知识。 – karthiks