2017-04-18 42 views
1

说我有RxJava:如何在不支持使用onType()时支持Observable?

// Function<? super Observable<T>, ? extends ObservableSource<R>> selector 
source -> Observable.merge(
    source.ofType(A.class).compose(transformerA), 
    source.ofType(B.class).compose(transformerB) 
); 

有一个聪明的方式抛出一个错误,如果source恰好是既不型A也不B这样我就可以检测缺失的实施?

回答

1

做一个过滤器通过如果源值既不是类型和flatMap未知的元素进入了一个错误:

source -> Observable.merge(
    source.ofType(A.class).compose(transformerA), 
    source.ofType(B.class).compose(transformerB), 
    source.filter(v -> !(v instanceof A) && !(v instanceof B)) 
     .flatMap(w -> 
      Observable.error(new IllegalArgumentException("Unknown type: " + w)) 
); 

是的,如果有一个类型C是得到一个处理程序,您必须延长模式。