1、泛型的概念:泛型就是可以根据需要指定类型。
(例如:Java定义了一个泛型类ArrayList用于存储泛型类型的元素。使用这个支持泛型的ArrayList类,可以创建String类型的ArrayList对象,也可以创建Integer类型的ArrayList对象。)
2、定义泛型类或泛型方法时,并不指定确定的类型,而是使用某一个符号来代表泛型的类型。
例子(以Collection接口为例):
public interface Collection<E> extends Iterable<E>
在此定义中,Collection和Iterable都是支持泛型的接口,这里的<E>表示形式泛型类型,使用时可以用一个实际具体类型来替换它。
(注:替换泛型类型称为泛型实例化)
3、使用泛型的优点:
1)使用泛型,可以把类型参数化。
2)使用泛型,能够在编译时而不是运行时检测出错误。
(如果试图使用一个类型不兼容的对象,则编译器就会检测出这个错误。例子:如果有一个泛型类型为String的ArrayList对象,向该ArrayList对象中添加Student等其它类型的对象时,编译器将检测出这个错误。)
4、泛型类或泛型方法允许用户指定可以和这些类或方法一起工作的对象类型。
5、JDK 1.5及以上,Java允许定义泛型类、泛型接口和泛型方法
6、泛型类(ArrayList类为例)
1)定义:public class ArrayList<E> extends AbstractList<E>
implements List<E>,RandomAccess,Cloneable,java.io.Serializable
2)ArrayList类支持泛型,该类的直接父类也支持泛型
3)ArrayList类同时实现了4个接口,其中List接口是泛型类接口
7、泛型接口与泛型类的使用:
List<String> names=new ArrayList<String>();
在该代码中,左侧的List表示泛型接口为List;右侧的ArrayList表示创建对象时使用了ArrayList泛型类,该泛型类实现了List泛型接口;左右两侧的String表示使用了实际具体类型。
8、Collection接口中包含了一些泛型方法。例如:
1)public boolean add(E object);
2)public boolean addAll(Collection<? extends E>collection);//带有通配符的泛型