(关于如何定义泛型就略过了…)
1、 通配符定义上下限
? extends 类1
:泛型的类型为类1
的子类,不然编译不通过。(指定上限)? super 类2
:泛型的类型为类2
的父类,不然编译不通过。(指定下限)
例:
public class Demo4<T> {
public static void main(String[] args) {
ArrayList<Zi> list = new ArrayList<>();
list.add(new Zi());
ArrayList<Fu> list1 = new ArrayList<>();
list1.add(new Fu());
fun(list);
// fun1(list); //编译不通过
fun2(list1);
fun3(list);
}
public static void fun(ArrayList<? extends Fu> arrayList) { //使用通配符,定义泛型的上限
System.out.println(arrayList);
}
public static void fun1(ArrayList<? super String> arrayList) { //使用通配符,定义泛型的下限
System.out.println(arrayList);
}
public static void fun2(ArrayList<Fu> arrayList) { //定义泛型类型
System.out.println(arrayList);
}
public static void fun3(ArrayList<?> arrayList) { //通配符,可传任意类型
System.out.println(arrayList);
}
}
class Fu {
@Override
public String toString() {
return "Fu类";
}
}
class Zi extends Fu {
@Override
public String toString() {
return "Zi类";
}
}
运行结果:
[Zi类]
[Fu类]
[Zi类]