考虑下面怪异的行为:泛型VS阵列
/* The new Java 5 or later Generic code */
class TestInserter {
public static void main(String[] ar) {
List<Integer> myList = new ArrayList<Integer>();
myList.add(20);
myList.add(42);
Inserter ins = new Inserter();
ins.insert(myList);
}
}
/* Legacy Code */
class Inserter {
public void insert(List list) {
list.add(new Integer(55));
}
}
编译和执行上面的代码将运行得很好的示例代码,而无需从编译器或JVM任何投诉。 insert()方法在我们的type-safe
ArrayList中插入一个新的Integer对象。但是,如果我将插入方法更改为如下所示:
public void insert(List list) {
list.add(new String("55"));
}
什么说?!上面的代码会运行吗?想一想,确定它会运行,奇怪,但是上面的代码编译并运行得很好。 这与Arrays有一点不同,它为您提供编译时和运行时保护,并防止发生这种情况。为什么他们这样做泛型?为什么Java允许泛型放入除指定类型之外的值?
我会改变你的问题的标题,以更清楚地解释你解释的是什么;也许可以将其改为“** Java:原始类型与泛型**”。另外,在Stackoverflow文档中这可能是一件有用的事情,因此可能检查是否添加了类似的东西(它可能有)。 – ostrichofevil