一般来说遇不到这种情况,但是还是记录一下。一般形式如下:
Observable.<String>create()
// ...
也就是调用方法前的句点 .
之后紧跟泛型类型。这既可以是静态方法,也可以是对象方法,形式都相同。如果调用的是当前对象内的方法,需要在前面加上 this
。如:
public void foo() {
View view = this.<View>findViewById(0);
}
public <T> T findViewById(int id) {}
这个情况是在使用 RxJava 的时候遇到的。当使用 Observable.create
方法创建一个对象时,后续无法获取到这个泛型,且无法利用强制转换。
Observable.create(emitter -> {
emitter.onNext("");
})
.map(s -> {
return s.length(); // × 这里无法自动判断对象的类型
})
需要改为:
Observable.<String>create(emitter -> {
emitter.onNext("");
})
.map(s -> {
return s.length(); // √
})
网友评论