泛型的通配符
public static void main(String[] args) {
泛型不具备继承性,但是数据具备继承性
创建集合的对象
ArrayList<Ye> list1 = new ArrayList<>();
ArrayList<Fu> list2 = new ArrayList<>();
ArrayList<Zi> list3 = new ArrayList<>();
调用method方法
method(list1);
//method(list2);报错
//method(list3);报错
list1.add(new Ye());
list1.add(new Fu());
list1.add(new Zi());
}
* 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。
public static void method(ArrayList<Ye> list) {
}
案例
需求:
定义一个方法,形参是一个集合,但是集合中的数据类型不确定。
且该集合为Fu和其所有父类
已知
class Ye {
}
class Fu extends Ye {
}
class Zi extends Fu {
}
class Student2{}
public static void main(String[] args) {
//创建集合的对象
ArrayList<Ye> list1 = new ArrayList<>();
ArrayList<Fu> list2 = new ArrayList<>();
ArrayList<Zi> list3 = new ArrayList<>();
ArrayList<Student2> list4 = new ArrayList<>();
method(list1);
method(list2);
//method(list3);报错
//method(list4);报错
}
代码实现
public static void method(ArrayList<? super Fu> list) {
}
泛型通配符详解
- 此时,泛型里面写的是什么类型,那么只能传递什么类型的数据。
-
弊端:
利用泛型方法有一个小弊端,此时他可以接受任意的数据类型
Ye Fu Zi Student -
希望:本方法虽然不确定类型,但是以后我希望只能传递Ye Fu
此时我们就可以使用泛型的通配符:
-
?也表示不确定的类型
-
他可以进行类型的限定
-
? extends E: 表示可以传递E或者E所有的子类类型
-
? super E:表示可以传递E或者E所有的父类类型
-
应用场景:
-
1.如果我们在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口。
-
2.如果类型不确定,但是能知道以后只能传递某个继承体系中的,就可以泛型的通配符
-
泛型的通配符:
关键点:可以限定类型的范围。
-
总结