在RxJava2中取消实现仅返回对象类型可观察

时间:2018-10-29 10:06:22

标签: java rx-java2

使用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>

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

1 个答案:

答案 0 :(得分:0)

akarnokd 的评论所述,这是Java的局限性。 可以通过添加类型参数来解决,例如:

.<String>dematerialize()