首页 > 解决方案 > 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>

如果我之后在地图调用中进行演员表(如下一行所示),一切似乎都可以正常工作。我在这里做错了什么?

标签: javarx-java2

解决方案


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()

推荐阅读