闲言少叙,直接上代码。
class Holder<T> {
T value;
public Holder(T val) {
this.value = val;
}
public T get() {
return this.value;
}
}
public class Main {
public static void main(String[] args) {
Holder<Object> raw1 = new Holder<Integer>(1); //1
Holder<?> raw2 = new Holder<Integer>(1); //2
Holder<Object> raw3 = new Holder(1); //3
Holder<?> raw4 = new Holder(1); //4
}
}
语句1 在 Eclipse 中会提示 Type mismatch: cannot convert from Holder to Holder 的错误,显然这里不能用 泛型 Integer的对象 给 泛型Object的对象 赋值。
语句2 正常通过,这说明可以用 任意类型的泛型的对象 给 通配符类型的泛型对象 赋值。
语句3 和 语句4 有 Holder is a raw type. References to generic type Holder should be parameterized 的警告。