您使用了类型擦除,这意味着您忽略了以前设置的泛型检查。你可以摆脱这一点,因为泛型是一个编译时功能,在运行时不会检查。
您拥有的相同内容
List list = new ArrayList() ;
list.add(1) ;
Integer hello = (Integer) list.get(0) ;
System.out.println(hello);
或
List<Integer> list = new ArrayList<Integer>() ;
list.add(1) ;
Integer hello = list.get(0); // generics add an implicit cast here
System.out.println(hello);
如果您查看编译器生成的字节码,则无法区分。
有趣的是,你可以这样做
List<String> strings = new ArrayList<String>();
@SuppressWarnings("unchecked");
List<Integer> ints = (List) strings;
ints.add(1);
System.out.println(strings); // ok
String s= strings.get(0); // throws a ClassCastException