使用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>
如果我随后在地图调用中进行了转换(如下一行所示),那么一切似乎都可以正常工作。我在这里做什么错了?
答案 0 :(得分:0)
如 akarnokd 的评论所述,这是Java的局限性。 可以通过添加类型参数来解决,例如:
.<String>dematerialize()