2017-02-21 7 views
0

RxJava 2を学習しています。特定の型の例外をキャッチしてObservableを返したいと思います。基本的には、onErrorResumeNext()は特定の例外クラスだけを捕捉したいが、彼女はそのようには動作しないように見える。RxJava 2の特定の型の例外をキャッチするだけです。

RxJava 2でこの動作を達成するための私のオプションは何ですか? onErrorResumeNext()を使用して、私の特定の例外を処理し、他のものを取り返しますか?ような何か:このように使用後

public <T> Function<Throwable, Observable<T>> whenExceptionIsThenIgnore(Class<E> what) { 
    return t -> { 
    return what.isInstance(t) ? Observable.empty() : Observable.error(t); 
    }; 
} 

.onErrorResumeNext(throwable -> throwable instanceof NotFoundException ? Observable.empty() : Observable.error(throwable)); 
+0

をObservable.emptyを返しますはい、onErrorResumeNext' 'の' Function'変異体が移動するための方法です。 – akarnokd

+0

ありがとう、@akarnokd。 私は 'onErrorResumeNext'は署名がある理由を理解しようとしています:' (<?...、スーパーのThrowable>機能) 'onErrorResumeNextをそれは私には思われる'こと? Throwableは '私たちが望むものではなく'を拡張していますか?スーパースローブ可能です。これは、 '.onErrorResumeNext((Object throwable) - > ...'ではなく) '.onErrorResumeNext((NotNullException throwable) - > ...')私には意味があるでしょう – HolySamosa

+0

Javaの型システムはありませんラムダを介してそのようなタイプのキャプチャを表現するのに十分強力です。 – akarnokd

答えて

3

だけで組成物を用いる

Observable.from(...).flatMap(...) 
.onErrorResumeNext(whenExceptionIsThenIgnore(IllegalArgumentException.class)) 
.onErrorResumeNext(whenExceptionIsThenIgnore(IOException.class)) 
... 

は、選択的に例外を処理するにもthis answerを参照してください。

2

私はだけでなく、ヌル

.onErrorResumeNext(t -> t instanceof NullPointerException ? Observable.empty():Observable.error(t)) 
+0

初心者ミス - 固定。3日間でどれくらい来ましたか? – HolySamosa

関連する問題