这是因为在执行时,由于 类型Erase 不会 真正 检查对象是否为a 。真的只是将其投射到。例如:
List<Integer>__
List
List<String> strings = new ArrayList<String>();strings.add("x");Object o = strings;// Warning, but will succeeed at execution timeList<Integer> integers = (List<Integer>) o;Integer i = integers.get(0); // Bang!有关更多信息,请参见Angelika
Langer的Java泛型常见问题解答,尤其是类型擦除部分。



