1.泛型通配符:
- 通配符的基本使用
- 通配符的高级使用 --> 受限泛型
2.通配符的基本使用:
泛型的通配符:
不知道使用什么类型来接收的时候,此时可以使用【?】
? 表示未知通配符
注意:不能往该集合中存储数据,只能获取数据
public class Tests {
public static void main(String[] args) {
// 关系: String类继承Object类
ArrayList<Object> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
list2.add("donglan");
// 关系: Integer类继承Number Number类继承Object类
ArrayList<Integer> list3 = new ArrayList<>();
ArrayList<Number> list4 = new ArrayList<>();
//method0(list1);
method0(list2);
//method0(list3);
//method0(list4);
method1(list1);
//method1(list2); 编译报错 因为方法中的形参ArrayList<Object> 只能接收Object
类型的,泛型不存在多态
//method1(list3); 编译报错 因为方法中的形参ArrayList<Object> 只能接收Object
类型的,泛型不存在多态
//method1(list4); 编译报错 因为方法中的形参ArrayList<Object> 只能接收Object
类型的,泛型不存在多态
method2(list1);
method2(list2);
method2(list3);
method2(list4);
}
//定义一个方法,可以接收以上4个集合对象
public static void method0(ArrayList list){
Object obj = list.get(0);
list.add("zhangsan");
System.out.println("obj :"+obj);
System.out.println("list: "+list);
}
//定义一个Object的集合对象
public static void method1(ArrayList<Object> list){
}
//定义一个通配符的集合对象
public static void method2(ArrayList<?> list){
//Object obj = list.get(0);
//list.add("zhangsan"); 编译报错,如果我们使用了通配符泛型,不能往该集合中存储数据,只能获取数据
//System.out.println("obj: "+obj);
list.remove("donglan"); // 可以删除,不能添加
System.out.println("list: "+list);
}
}
3.通配符高级使用 --> 受限泛型
上限:
<? extends 类名> 只能接收该类类型或者其子类类型
下限:
<? super 类名> 只能接收该类类型或者其父类类型
import java.util.ArrayList;
public class Tests {
public static void main(String[] args) {
// 关系: String类继承Object类
ArrayList<Object> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
// 关系: Integer类继承Number Number类继承Object类
ArrayList<Integer> list3 = new ArrayList<>();
ArrayList<Number> list4 = new ArrayList<>();
method1(list1);
method1(list2);
method1(list3);
method1(list4);
method2(list1);
method2(list2);
method2(list3);
method2(list4);
//method3(list1); 编译报错,因为方法参数是 上限为Number,
//method3(list2); 编译报错,因为方法参数是 上限为Number,
method3(list3);
method3(list4);
method4(list1);
//method4(list2); 编译报错,因为方法参数是 下限为Integer
method4(list3);
method4(list4);
}
// 定义一个方法,可以接收以上四种集合对象
public static void method1(ArrayList list){
}
//定义一个方法,可以接收以上四种集合对象
public static void method2(ArrayList<?> list){
}
// 定义一个方法,只可以接收list3和list4集合对象
public static void method3(ArrayList<? extends Number> list){
}
// 定义一个方法,只可以接收list1,list3,list4集合对象
public static void method4(ArrayList<? super Integer> list){
}
}