泛型通配符:
当不知道用什么类型接收时候,可以使用?
来代表任意的数据类型,?
表示未知通配符
使用方式:
不能创建对象使用,只能作为方法使用(只能接收数据,不能向集合中存储数据)
普通使用方式
例子:定义一个方法来遍历所有类型的ArryList集合
此时我们不知道ArryList集合使用什么数据类型
import java.util.ArrayList;
import java.util.Iterator;
public class DemoGeneric {
public static void main(String[] args) {
ArrayList<Integer> arry1 = new ArrayList<>();
arry1.add(1);
arry1.add(2);
ArrayList<String> arry2 = new ArrayList<>();
arry2.add("a");
arry2.add("b");
printArryList1(arry1);
printArryList1(arry2);
printArryList3(arry1);
printArryList3(arry2);
}
/*定义一个方法来遍历所有类型的ArryList集合
此时我们不知道ArryList集合使用什么数据类型*/
//普通for循环
public static void printArryList1(ArrayList<?> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
//Iterator迭代器
public static void printArryList3(ArrayList<?> list) {
Iterator<?> ite = list.iterator();
while (ite.hasNext()) {
System.out.println(ite.next());
}
}
}
高级使用方式(了解)
- 泛型的上限限定:
? extend E
代表使用是泛型只能是E
的子类/本身 - 泛型的下限限定:
? super E
代表使用是泛型只能是E
的父类/本身