RxJava .zip()原始类型?

时间:2019-06-25 10:08:21

标签: java rx-java rx-java2

我正在尝试zip一起观察两个。第一个是Single<SomeClass>类型,第二个是Observable<SomeOtherClass>。但是,在.zip()函数中,返回类型不会转换为正确的类,而我会得到原始类型(T1T2)。示例:

Single<SomeClass> o1 = ....
Observable<SomeOtherClass> o2 = ....

Observable.zip(o1,o2, (u,u2) -> ...) // here I get 2 raw types

如果我尝试这种方式(因为我只能“压缩” 2个可观察对象):

 o1.zipWith(o2, (someClass, u) -> ...) //here only o1 is cast to class instance

如果我尝试Observable.zip(Observable.range(...),Observable.interval(...), (integer,long) -> ...),我会得到正确的演员表。

在上面的示例中,我无法弄清楚为什么它不能转换为类对象,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

使用zip()可以在输入中获得一些对象,然后在OUT中将它们转换为其他对象。 因此,您需要指定一些输出类型:

Observable.zip(o1, o2, (u1,u2) -> new NewOtherClass(u1, u2))

在上面的示例中,编译器知道您的lambda的返回类型为NewOtherClass

请注意,不能在没有附加转换的情况下在同一链中使用Single和Observable(请注意下面的.toObservable()):

 Observable.zip(o1.toObservable(), o2, (u1,u2) -> /*return do something*/)