java面向对象思想-类型化与原始arraylist的兼容性问题

在jdk5之前java中并没有存在泛型类,因此原始的arraylist的类型最初被定义为object,之后再通过转型存入需要的对象.而你在自己的代码中可能更愿意使用类型参数来增加代码安全性.那么如何使用类型参数与遗留代码做交互呢.

首先看下面的例子:

public class EmployeeDB {

	public void update(ArrayList list) {
	}

	public ArrayList find(String query) {
		return null;
	}

	public static void main(String[] args) {
		ArrayList<Employee> staff = new ArrayList<>();
		EmployeeDB employeeDB = new EmployeeDB();
		employeeDB.update(staff);

	}
}

事实证明原始数组列表接收类型化的参数并不需要任何类型转换就可以完成.但是尽管编译器并么有给出任何错误信息或者是警告,但是这样调用并不太安全.在update方法中,添加到数组列表中的元素可能不是employee类型.在对这些元素进行检索时就会发现异常.

相反的,将一个原始arraylist付给一个类型化的arraylist就会发生异常.

猜你喜欢

转载自blog.csdn.net/xiaoai1994/article/details/81975606