如果我用javac Test.java -Xlint:unchecked
编译下面的代码,由于类型擦除,对变量c4
的赋值会产生警告。
这里的类型是无关紧要的,只是例子。
为什么对象引用g3
会丢失有关成员变量Comparator<String> strCmp
的类型信息?为什么c1
没有发出相同的警告,唯一的区别是该类不是通用的?
import java.util.Comparator;
public class Test {
NormalClass n = new NormalClass();
Comparator<String> c1 = n.strCmp;
GenericClass<Long> g1 = new GenericClass<Long>();
Comparator<String> c2 = g1.strCmp;
GenericClass<?> g2 = new GenericClass<Long>();
Comparator<String> c3 = g2.strCmp;
GenericClass g3 = new GenericClass<Long>();
Comparator<String> c4 = g3.strCmp;
}
class NormalClass {
public Object t;
public Comparator<String> strCmp;
}
class GenericClass<T> {
public T t;
public Comparator<String> strCmp;
}