RxJava2中的Dematerialize只返回可观察的对象类型

RxJava2中的Dematerialize只返回可观察的对象类型,java,rx-java2,Java,Rx Java2,使用dematerialize时,.dematerialize()返回的Observable始终是Object类型,而不是我的原始类型。 这里的示例(在Android项目中使用IntelliJ) import org.junit.Test; 导入io.reactivex.Observable; 导入io.reactivex.observer.TestObserver; 公共类RxTest{ @试验 公开无效测试(){ 可观察的错误可观察=((可观察的)可观察的。只是(“测试”).material

使用dematerialize时,.dematerialize()返回的Observable始终是Object类型,而不是我的原始类型。 这里的示例(在Android项目中使用IntelliJ)

import org.junit.Test;
导入io.reactivex.Observable;
导入io.reactivex.observer.TestObserver;
公共类RxTest{
@试验
公开无效测试(){
可观察的错误可观察=((可观察的)可观察的。只是(“测试”).materialize().dematerialize());
Observable castedObservable=Observable.just(“Test”).materialize().dematerialize().map(i->(String)i);
TestObserver TestObserver=新的TestObserver();
castedObservable.subscribe(testObserver);
testObserver.assertValueCount(1);
testObserver.资产价值(“测试”);
}
}
此代码将在测试函数的第一行显示错误

error: incompatible types: Observable<Object> cannot be converted to Observable<String>
错误:不兼容的类型:Observable无法转换为Observable

如果我在之后的map调用中执行cast(如下一行所示),一切似乎都很好。我做错了什么?

正如akarnokd在评论中所解释的,这是Java的一个限制。 可以通过添加类型参数来解决此问题,例如:

.<String>dematerialize()
.dematerialize()

只需通过
.dematerialize()
强制使用所需的类型参数,就可以了。Java不允许我们有只在父类的类型参数具有特定形状时才显示的实例方法,因此类型断开。这为我解决了这个问题,will post is作为一个答案,以防其他人偶然发现这个问题
.<String>dematerialize()