在java5.0中引进泛型的新概念。当使用集合时这将是十分有用的。程序员避免因在某些集合内插入错误的类型的而产生的错误。还可以避免众多的类型的转换。为了能避免因这种类型的错误,集合必须正确的设置。这一切只是增加了简单的语法:
List<MyClass> aList = new ArrayList<MyClass>();
现在编码变的优美和简单:
MyClass a = aList.get(i);
但是泛型概念不只限于此。还有泛型方法。我第一次使用泛型方法排序数组就碰了壁。Sort方法定义如下:
public static <T> void sort(T[] a, Comparator<? super T> c);
我不能理解<? super T>的含义,关于通配符在下列文章中有介绍:http://java.sun.com/developer/technicalArticles/J2SE/generics/
但我使用新定义的Array.sort()方法,编译器却警告:Unchecked invocation sort(Object[], Comparator) of the generic method sort(T[], Comparator<? super T>) of type Arrays.
你可以在方法上面使用@SuppressWarnings("unchecked")忽略警告。如果你使用5.0更应该这样做代码如下:
public void myMethod() {
MyClass[] arr = getAnArrayOfMyClass();
Comparator c = new MyClassComparator();
Arrays.sort(arr, c);
}
private class MyClassComparator implements Comparator {
public int compare(Object o1, Object o2) {
MyClass a1 = (MyClass)o1;
MyClass a2 = (MyClass)o2;
return a1.getString().compareTo(a2.getString());
}
}
同样的代码在JDK5.0中变成下面这样:
public void myMethod() {
MyClass[] arr = getAnArrayOfMyClass();
MyClassComparator c = new MyClassComparator();
Arrays.sort(arr, c);
}
private class MyClassComparator implements Comparator<MyClass> {
public int compare(MyClass o1, MyClass o2) {
return o1.getString().compareTo(o2.getString());
}
}
使用5.0风格代码变的更加简单。