java - RxJava2 中的 Dematerialize 只返回 Object 类型 Observable
问题描述
使用 dematerialize 时,.dematerialize() 返回的 Observable 始终是 Object 类型,而不是我原来的类型。此处的示例(在 Android 项目中使用 IntelliJ)
import org.junit.Test;
import io.reactivex.Observable;
import io.reactivex.observers.TestObserver;
public class RxTest {
@Test
public void test() {
Observable<String> wrongObservable = ((Observable<String>) Observable.just("Test").materialize().dematerialize());
Observable<String> castedObservable = Observable.just("Test").materialize().dematerialize().map(i -> (String)i);
TestObserver<String> testObserver = new TestObserver<>();
castedObservable.subscribe(testObserver);
testObserver.assertValueCount(1);
testObserver.assertValue("Test");
}
}
此代码将在测试函数的第一行显示错误
error: incompatible types: Observable<Object> cannot be converted to Observable<String>
如果我之后在地图调用中进行演员表(如下一行所示),一切似乎都可以正常工作。我在这里做错了什么?
解决方案
As explained in a comment by akarnokd, this is a limitation of Java. It can be solved by adding the type argument such as:
.<String>dematerialize()