在编译过程中,对于正确检验泛型结果后,会将泛型的相关信息擦出,也就是说,成功编译过后的class文件中是不包含任何泛型信息的。泛型信息不会进入到运行时阶段。
1.泛型类
T,U类型参数可以用在:
1.属性类型
2.方法返回值
3.方法参数类型
public class User<T,U>{//T和U指定了t和u的变量类型,不使用T和U,默认为t和u为Object类型
private T t;
private U u;
public void SetT(T t){
this.t=t;
}
public T getT(){
return this.t;
}
public U getU() {
return u;
}
public void setU(U u) {
this.u = u;
}
}
public interface User<T,U>{//T和U指定了t和u的变量类型,不使用T和U,默认为t和u为Object类型
public T getT();
}
2.泛型方法
不确定方法参数类型时
public <T> void test(T t){
System.out.println(t.getClass().getName);
}
调用时可以传入任意类型的参数,根据传入参数类型决定参数类型
test(“ ”);
test(1);
test(0.1);
test(new Object());
3.泛型接口(配合泛型方法使用)
public interface Test<T>{
public void test(T t);
}
public interface User<T,U>{//T和U指定了t和u的变量类型,不使用T和U,默认为t和u为Object类型
public U testT(T t);
public T testU(U u);
}
4.extends:限制范围
public static <T extends AbstractList> void test(T t){
System.out.println(t.getClass().getName());
}
:T的类型必须为AbstractList的子类