2017-07-07 84 views
0

我开始掌握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

在此先感谢。

回答

1

Exceptions.propagate返回RuntimeExceptionpotentialCheckedException返回String我假设。 lambda返回类型推断然后只能找到一个共同的超类型Serializable,这与一个明确键入的String订户不兼容。你更可能想要throw Exceptions.propagate(ex)

+0

傻我。谢谢@akarnokd。我被困在想知道我在RxJava中失去了什么,当时它实际上归结为Java的基础知识。 – karthiks