1泛型类/接口
一个类持有的对象类型暂时不指定,需要使用类型参数,用尖括号括住放在类名后面。然后在使用这个类的时候,再用实际的类型替换此类型参数。
public class Holder<T> {
private T a;
public Holder(T a) {
this.a = a;
}
public T getA() {
return a;
}
public void setA(T a) {
this.a = a;
}
public static void main(String[] args) {
Holder<AutoMobile> holder=new Holder<>(new AutoMobile());
AutoMobile a=holder.getA();//No cast needed
}
}
class AutoMobile{}
一个类还可以持有一组泛型对象(称为元祖)
public final T first;
public final U second;
public Holder(T first, U second) {
this.first = first;
this.second = second;
}
}
注:使用泛型类时必须再创建对象的时候指定类型参数的值。
2泛型方法
定义泛型方法,只需将泛型列表置于返回值之前。
public <T> void f(T x){
System.out.printf(x.getClass().getName());
}
注:对于static方法无法访问泛型类的类型参数,如果static方法需要泛型能力就必须使其称为泛型方法。
(1)可变参数与泛型方法
public class Test {
public static <T> List<T> makeList(T ...args){
List<T> result=new ArrayList<>();
for(T item:args){
result.add(item);
}
return result;
}
public static void main(String[] args) {
List<String> ls=makeList("A");
System.out.printf(ls.toString());
ls=makeList("A","B","C");
System.out.printf(ls.toString());
}
}
(2)泛型用于匿名内部类