我正在尝试zip
一起观察两个。第一个是Single<SomeClass>
类型,第二个是Observable<SomeOtherClass>
。但是,在.zip()
函数中,返回类型不会转换为正确的类,而我会得到原始类型(T1
,T2
)。示例:
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) -> ...)
,我会得到正确的演员表。
在上面的示例中,我无法弄清楚为什么它不能转换为类对象,有什么建议吗?
答案 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*/)