为什么以下不编译?+
编译器对打印行中的符号给出错误。
public class Test<T> {
HashMap<Integer,Integer> m = new HashMap<Integer, Integer>();
public static void main(String[] args) {
Integer zero1 = 0;
Integer zero2 = 0;
Test t = new Test();
t.m.put(1,zero1);
t.m.put(2,zero2);
System.out.println(t.m.get(1)+t.m.get(2)==t.m.get(2));
}
}
我理解类型擦除,但 m 是 a HashMap<Integer,Integer>
,它根本不应该依赖于类型<T>
。为什么编译器拒绝这个?在第一行删除<T>
允许编译,但我不明白为什么这不应该工作。
这是编译器错误还是这种行为背后有任何逻辑?