类型化与原始数组列表的兼容性

public void update(Arraylist list) { ... }
public Arraylist find(String query) { ... }
可以将一个类型化的数组列表传递给update方法, 而并不需要进行任何类型转换。
Arraylist staff= ...;
employeeDB.update(staff);
也可以将staff对象传递给update方法。
尽管编译器没有给出任何错误信息或警告, 但是这样调用并不太安全。 在update方法中, 添加到数组列表中的元素可能不是Employee类型。
相反地,将一个原始ArrayList赋给一个类型化ArrayList会得到一个警告
Arraylist result= employeeDB.find(query); // yields warning
为了能够看到警告性错误的文字信息, 要将编译选项置为-Xlint:unchecked。使用类型转换并不能避免出现警告。
Arraylist result=(ArrayList) employeeDB.find(query);
// yields another warning
这样, 将会得到另外一个警告信息, 指出类型转换有误。
编译器在对类型转换进行检查之后, 如果没有发现违反规则的现象,就将所有的类拟化数组列表转换成原始 ArrayList 对象。 在程序运行时, 所有的数组列表都是一样的,即没有虚拟机中的类型参数。
在这种情形下,不必做什么。 只要在与遗留的代码进行交义操作时 研究一下编译器的警告性提示并确保这些警告不会造成太严正的后果就行了。一旦能确保不会造成严重的后果,可以用
@SuppressWarnings(unchecked")
标注来标记这个变扯能够接受类型转换,例如
@SuppressWarni ngs ("unchecked")
Arrayl i st result =(Arraylist) employeeOB.find(query);
// yields another warning