通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型,泛型类和泛型方法具备可重用性,类型安全性和高效性.
泛型的定义
Java中可以定义泛型类,泛型方法,泛型接口,泛型的定义通过泛型参数来定义,参数类型包含在<>中,参数类型用Java标识符来表示,例如大写字母T,E等.
泛型类 用于封装非特定数据类型的操作(链接列表,哈希表,堆栈,对列等)
设计泛型类需要考虑的事项:
哪些类型需要通用化为泛型类型参数
对泛型类型参数应用什么约束
是否将泛型行为分解为基类和子类
是否实现一个或多个泛型接口.
public class Entry{//定义T类型的Entry
private T value;//T类型的value值
public Entrynext;//定义Entry的next域
public Entry(T value){
this.value=value;
this.next=next;
}
public T getValue(){return value;}
public EntrygetNext(){return next;}
}
泛型方法 泛型方法的参数化类型列表放在方法修饰符的后面,返回值的前面
使用泛型方法遵循的准则
如果泛型方法的泛型参数与类型的泛型参数相同,编译器将生成警告,因为方法的泛型参数隐藏了外部类型的泛型参数,如果需要使用其他参数类型,应该为方法的参数类型提供另一个标识符.
可以直接通过”方法名();”的形式调用泛型方法,编译器能够根据传入的方法实参推断类型形参.
使用约束对方法中的类型参数启用更专门的操作.
Public void addTail(E value){//链表尾加
Entry entry=new Entry(value);//定义新Entry
Entry p=null;
For(p=headNode;p.getNext()!=null;p=p.getNext()){//找尾巴
;
}
p.setNext(entry);
}
泛型的约束 默认情况下没有约束的类型参数称为未绑定的类型参数,创建未绑定的类型参数的泛型类的实例时可以为泛型类的形参指定任何类型.如果需要限定该泛型类型参数仅支持某些特定类型,可以用关键字extends定义泛型参数的约束