为什么要使用泛型程序设计
泛型程序设计意味着编写的代码可以被不同类型的对象所重用。
参数类型的好处
在Java增加泛型类以前,泛型程序设计是使用继承实现的。ArrayList类只维护一个Object引用的数组:
public class ArrayList
{
private Object[] elementData;
...
public Object get(int i){...}
public void add(Object o){...}
}
这样有两个问题:1.取得一个值得时候必须进行强制类型转换,2.没有错误检查,可以向数组里添加任意类的对象。
ArrayList files = new ArrayList();
...
String filename = (String) files.get(0);//手动强制类型转换
...
files.add(new File("..."))//没有错误检查
泛型提供了一个更好的解决方案:参数类型。ArrayList有一个类型参数来指示元素的类型:
ArrayList<String> files = new ArrayList<String>();
//也可以在构造参数中省略泛型类型。
ArrayList<String> files = new ArrayList<>();
提供了类型参数,编译器可以很好地利用这个类型来进行判断,当调用get的时候就不要强制类型转换,编译器就知道返回的类型为String。
String filename = files.get(0);
同时还提供了错误检查,当插入类型不为String时,编译器会提示错误。
files.add(new File("..."));//can only add String objects to an ArrayList<String>
参数类型的魅力在于:使得程序有更好的可读性和安全性。