【发布时间】:2017-03-20 02:36:57
【问题描述】:
考虑下面的示例代码
/* 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 没有任何抱怨。 non type-safe insert() 方法在我们的type-safe ArrayList 中插入一个新的整数对象。但是,如果我将插入方法更改为这样的:
public void insert(List list) {
list.add(new String("55"));
}
怎么说?!上面的代码会运行吗?想一想,是的,它肯定会运行,奇怪,但是上面的代码编译并运行得很好。 这与 Arrays 略有不同,后者为您提供编译时和运行时保护并防止此类事情发生。为什么他们这样做泛型?为什么 Java 允许泛型放入指定类型以外的值?!
【问题讨论】:
-
我会更改您问题的标题,以更清楚地解释您要解释的内容;也许将其更改为“Java:原始类型与泛型”。此外,这在 Stackoverflow 文档中可能很有用,因此请检查是否添加了类似的内容(可能有)。
-
我还没有检查...您是否发现文档中已经涵盖了该主题?
标签: java arrays generics compiler-warnings