您使用了类型擦除,这意味着您已经忽略了以前设置的通用检查.你可以把它作为这个,因为泛型是一个编译时功能,在运行时没有检查.
你有什么相同的
List list = new ArrayList() ;
list.add(1) ;
Integer hello = (Integer) list.get(0) ;
System.out.println(hello);
要么
List list = new ArrayList() ;
list.add(1) ;
Integer hello = list.get(0); // generics add an implicit cast here
System.out.println(hello);
如果你看编译器生成的字节码,就没有办法说出差别了.
有趣的是,你可以做到这一点
List strings = new ArrayList();
@SuppressWarnings("unchecked");
List ints = (List) strings;
ints.add(1);
System.out.println(strings); // ok
String s= strings.get(0); // throws a ClassCastException