以下がコンパイルされないのはなぜですか?コンパイラは+
、印刷行のサインに対してエラーを出します。
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はaHashMap<Integer,Integer>
であり、型にまったく依存しないはず<T>
です。コンパイラがこれを拒否するのはなぜですか?最初の行で削除<T>
するとコンパイルできますが、なぜこれがうまく機能しないのかわかりません。
これはコンパイラのバグですか、それともそのような動作の背後にあるロジックはありますか?