需要说明为什么会有泛型,就需要从使用泛型的好处说。
好处
1.类型安全。
泛型类或方法允许用户指定可以和这些类或方法一起工作的对象类型。如果试图使用一个不相容的对象,编译器就会检测出这个错误。
//first
Comparable c = new Date(); System.out.println(c.compareTo("red"));
//second
Comparable<Data> c = new Date(); System.out.println(c.compareTo("red");
比较第一段和第二段代码
第一段语句会编译,但是它会产生运行时错误,因为字符串不能与Date对象进行比较;
第二段中c声明为一个引用变量,它的类型是Comparable<Date>,然后调用compareTo方法来比较Date对象和一个字符串。这样的代码会产生编译错误,因为传递给compareTo方法的参数必须是Date类型的。
2.消除强制类型转换。 这使得代码更加可读,并且减少了出错机会。
代码不使用泛型:
List li = new ArrayList(); li.put(new Integer(3)); Integer i = (Integer) li.get(0);
代码使用泛型:
List<Integer> li = new ArrayList<Integer>(); li.put(new Integer(3)); Integer i = li.get(0);
PS:
关于使用泛型的几点小注意:
1. 泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2. 同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3. 泛型的类型参数可以有多个。