这周学习了泛型程序设计,泛型程序设计意味着编写代码可以被很多不同类型的对象所重用。泛型也被称为参数化类型,就是在定义类、接口和方法时,通过类型参数指示将要处理的对象类型。(如ArrayList类) 泛型程序设计(Generic programming)意味着编写代码可以被很多不同类型的对象所重用。
在定义简单泛型类时,对于这个类来说,我们只是关注泛型,而不会为数据存储的细节烦恼,以Pair类为例:
public class Pair<T>
{
private T first;
private T second;
public Pair() {first = null; second = null;}
public Pair(T first, T second) { this.first = first; this.second = second; }
public T getFirst() {return first;}
public T getSecond() {return second;}
,
public void setFirst(T newValue) {first = newValue;}
public void setSecond(T newValue) {second = newValue;}
}
Pair类引入了一个变量T,用尖括号(<>)括起来,并放在类名的后面,泛型类可以有多个泛型变量,,除了定义泛型类,还可以定义泛型方法,泛型方法可以定义在普通类中,也可以定义在泛型类中,对于泛型变量的限定,为了确信T所属于的类有compare to 方法,将T限制为实现了Comparable 接口的类。限定类型用&分隔,逗号分隔类型变量,在java中的继承中,可以根据需要拥有多个接口超类型,但限定中至多有一个类,如果用一个类作为限定,它必须是限定列表中的第一个,extends关键字所声明的上界既可以是一个类,也可以是一个接口,<T extends Bounding Type>表示T应该是绑定类型的子类型,
通过使用super关键字可以固定泛型参数的类型为某种类型或者其超类 当程序希望为一个方法的参数限定类型时,通常可以使用下限通配符。
泛型类的约束与局限性:
1、不能用基本类型实例化类型参数 2、运行时类型查询只适用于原始类型3、 不能抛出也不能捕获泛型类实例 4、 参数化类型的数组不合法 5、 不能实例化类型变量 6、泛型类的静态上下文中类型变量无效7、 注意擦除后的冲突