【发布时间】:2018-10-29 10:06:22
【问题描述】:
使用 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>
如果我之后在地图调用中进行演员表(如下一行所示),一切似乎都可以正常工作。我在这里做错了什么?
【问题讨论】:
-
只需通过
.<String>dematerialize()强制所需的类型参数,它应该可以工作。 Java 不允许我们拥有仅在父类的类型参数具有特定形状时才显示的实例方法,因此类型断开连接。 -
这为我解决了,将发布作为答案,以防其他人偶然发现此问题