package demo02;
import java.util.ArrayList;
import java.util.Iterator;
/*
泛型的通配符:
?代表任意的数据类型
使用方式:
不能创建对象使用
只能作为方法的参数使用
*/
public class demo02Generic {
public static void main(String[] args) {
ArrayList<Integer> list1=new ArrayList<>();
list1.add(1);
list1.add(2);
ArrayList<String> list2=new ArrayList<>();
list2.add("哈哈");
list2.add("嗯嗯");
printArray(list1);
printArray(list2);
}
/*
定义一个方法,能遍历所有类型的ArrayList集合
这时候我们不知道ArrayList集合使用什么数据类型,可以泛型的通配符
?来接受数据类型
注意:
泛型没有继承概念
*/
public static void printArray(ArrayList<?> list){
//使用迭代器遍历集合
Iterator<?> it=list.iterator();
while(it.hasNext()){
//it.next()方法,取出的元素是Object,可以接收任意的数据类型
Object i=it.next();
System.out.println(i);
}
}
}
泛型通配符的高级使用
package demo02;
import java.util.ArrayList;
import java.util.Collection;
public class Demo03Generic {
public static void main(String[] args) {
Collection<Integer> list1=new ArrayList<Integer>();
Collection<String> list2=new ArrayList<String>();
Collection<Number> list3=new ArrayList<Number>();
Collection<Object> list4=new ArrayList<Object>();
getElement(list1);
getElement(list2);//报错
getElement(list3);
getElement(list4);//报错
getElement2(list1);//报错
getElement2(list2);//报错
getElement2(list3);
getElement2(list4);
/*
类与类之间的继承关系
Integer extends Number extends Object
String extends Object
*/
}
//泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
public static void getElement(Collection<? extends Number> coll) {
}
//泛型的下限:此时的泛型?,必须是Number类型或者Number的父类
public static void getElement2(Collection<? super Number> coll){}
}