泛型程序设计 ( Generic programming ) 意味着编写的代码可以被很多不同类型的对象所重用。 ArrayList 类可以聚集任何类型的对象 。 这是一个泛型程序设计的实例 。
定义简单泛型类
一个泛型类 ( generic class ) 就是具有一个或多个类型变量的类。
public class Stu<N , A , S>{
private N name;
private A age;
private S sex;
public Stu(N name , A age , S sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public N getName() {
return name;
}
public void setName(N name) {
this.name = name;
}
public A getAge() {
return age;
}
public void setAge(A age) {
this.age = age;
}
public S getSex() {
return sex;
}
public void setSex(S sex) {
this.sex = sex;
}
}
Pair 类引人了一个类型变量 T(使用大写的形式,K和V分别表示关键字和值的类型,T(或者U S)表示任意类型),E表示集合的元素类型, 用尖括号( < > ) 括起来, 并放在类名的后面 。 泛型类可以有多个类型变量。 类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。
泛型方法
到目前为止,我们所使用的泛型都是应用于整个类上。泛型同样可以在类中包含参数化的方法,而方法所在的类可以是泛型类,也可以不是泛型类。也就是说,是否拥有泛型方法,与其所在的类是不是泛型没有关系。
类型变量放在修饰符 ( 这里是 publicstatic ) 的后面, 返回类型的前面 。
[访问权限修饰符] [static] [final] <类型参数列表> 返回值类型 方法名([形式参数列表])
public static <T> List find(Class<T> cs,int userId){}
泛型的高级用法
限制泛型可用类型
在 Java 中默认可以使用任何类型来实例化一个泛型类对象。当然也可以对泛型类实例的类型进行限制,语法格式如下:
class 类名称<T extends anyClass>
其中,anyClass 指某个接口或类。使用泛型限制后,泛型类的类型必须实现或继承 anyClass 这个接口或类。无论 anyClass 是接口还是类,在进行泛型限制时都必须使用 extends 关键字。