泛型通配符:
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符 < ?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
通配符的基本使用
泛型的通配符,不知道使用什么类型来接收的时候,此时可以使用 ? ,表示未知通配符。
import java.util.ArrayList;
import java.util.Iterator;
/*
泛型的通配符:
?:代表任意的数据类型
使用方法:
不能创建对象使用
只能作为方法的参数使用
*/
public class Demo05Generic {
public static void main(String[] args) {
ArrayList<Integer> list01 = new ArrayList<>();
list01.add(1);
list01.add(2);
ArrayList<String> list02 = new ArrayList<>();
list02.add("a");
list02.add("b");
printArray(list01);
printArray(list02);
}
/*
定义一个方法,能遍历所有类型的Arraylist集合
这时候我们不知道Arraylist集合使用什么数据类型
所以可以使用泛型的通配符 ? 来接收数据类型。
注意:
泛型没有继承概念
*/
public static void printArray(ArrayList<?> list){
//使用迭代器遍历集合
Iterator<?> it = list.iterator();
while (it.hasNext()){
//it.next()方法,取出的元素是Object,可以接受任意的数据类型
Object o = it.next();
System.out.println(o);
}
}
}
通配符高级使用-受限泛型
之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置,但是在JAVA的泛型中可以指定一个泛型的上限和下限。
泛型的上限
格式:类型名称<? extend 类> 对象名称
意义:只能接受该类型及其子类
泛型的下限
格式:类型名称 < ? super > 对象名称
意义:只能接收该类型及其父类型