使用java SE5之前的容器的一个主要问题就是编译器允许你向容器插入不正确的类型,例如:
//: holding/ApplesAndOrangesWithoutGenerics.java // Simple container example (produces compiler warnings). // {ThrowsException} package object; import java.util.*; class Apple { private static long counter; private final long id = counter++; public long id() { return id; } } class Orange {} public class ApplesAndOrangesWithoutGenerics { @SuppressWarnings("unchecked")//@SuppressWanrings注解及其参数表示只有有关"不受检查的异常"的警告信息应该被抑制 //https://i.cnblogs.com/EditPosts.aspx?postid=9919361&update=1 public static void main(String[] args) { ArrayList apples = new ArrayList(); //一个apple容器 for(int i = 0; i < 3; i++) apples.add(new Apple()); // Not prevented from adding an Orange to apples: apples.add(new Orange()); //却可以插入一个Orange对象 for(int i = 0; i < apples.size(); i++) ((Apple)apples.get(i)).id(); //由于Orange 和Apple没有可以转型的关系,转型失败,运行错误 // Orange is detected only at run time } } /* (Execute to see output) *///:~