泛型类:
定义格式:
修饰符 class 类名<代表泛型的变量>{}
泛型的方法
定义格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
泛型的接口:
修饰符 interface 接口名<代表泛型的变量>{}
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的子类
<? extends T>和<? super T>的区别
- <? extends T>表示该通配符所代表的类型是T类型的子类。
- <? super T>表示该通配符所代表的类型是T类型的父类。