泛型限定
/*
? 通配符,也可以理解为占位符,问号表示要传入的类型不确定。
泛型的限定:
?extends E 可以接受E类型或者E的子类型。上限。(限定上面,下面不固定)
?super E 可以接受E类型或E的父类型。下限。(限定下面,上面不固定)
*/
1.
import java.util.*;
class GenericDemo6{
public static void main(String[] args){
ArrayList<String> al= new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
ArrayList<Integer> al2= new ArrayList<Integer>();
al2.add(4);
al2.add(5);
al2.add(6);
printColl(al2); // 这样是报错的。
}
/*
public static void printColl(ArrayList<String> a) //这样做会报错: ArrayList<String> a =new ArrayList<Integer>(); 这样是报错的。
{
Iterator<String> it =a.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
*/
//当我们不确定要传入的数据类型时,可以这样做,写个问号方式
public static void printColl(ArrayList<?> a)。
{
Iterator<String> it =a.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//下面这一种的区别:T代表具体类型,你传入什么类型就是什么类型
public static <T> void printColl(ArrayList<T> a)。
{
Iterator<T> it =a.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
问号与T的区别:
T代表具体类型,你传入什么类型就是什么类型
问号代表占位符,不明确的类型
//泛型限定:用于限定一个范围的类型 即:另一种情况: 指定一个范围的类型,例如某一个类的子类
public static void printColl(ArrayList<? extends Person> a)。
{
Iterator<? extends Person> it =a.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
//泛型限定有两类: 向上限定,向下限定
5.关于向下限定的理解:
即: Person s1 = new Student("abc1");
为什么可以向下限定???
:
因为多态的存在,父类引用可以接受子类对象。
6.泛型的向下应用用的比较少。
|
|