泛型限定
package 泛型;
/* ? 通配符,也可以理解为占位符
* 泛型的限定:
* 1、 ? extends E: 可以接收E类型或者E的子类型。 上限限定
* 2、? super E:可以接收E类型或者E的父类型。 下限限定
*
*
* */
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo3 {
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
al.add("abc4");
ArrayList<Integer> al1 = new ArrayList<Integer>();
al1.add(2);
al1.add(4);
al1.add(6);
printColl(al);
printColl(al1);
//下面用了泛型限定
ArrayList<Person> al2 = new ArrayList<Person>();
al2.add(new Person("a"));
al2.add(new Person("a1"));
al2.add(new Person("a2"));
printColl3(al2);
ArrayList<Student> al3 = new ArrayList<Student>();
al3.add(new Student("b"));
al3.add(new Student("b2"));
al3.add(new Student("b3"));
printColl3(al3);
}
//把迭代器封装 传泛型方法一:
public static void printColl(ArrayList<?> al){//?占位符
Iterator<?> it = al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
//把迭代器封装 传泛型方法二:
public static <T> void printColl1(ArrayList<T> al){//?占位符
Iterator<T> it = al.iterator();
while(it.hasNext()){
T t = it.next();//T代可传入一种类型,可以操作对象。?代表不明确具体类型
//可传入各种类型。除了基本类型
System.out.println(it.next());
}
}
//把迭代器封装 传泛型方法三:泛型限定
public static void printColl3(ArrayList<? extends Person> al){//?占位符
Iterator<? extends Person> it = al.iterator();
while(it.hasNext()){
//T t = it.next();//T代可传入一种类型,可以操作对象。?代表不明确具体类型
//可传入各种类型。除了基本类型
System.out.println(it.next());
}
}
}
//上限限定的两个类
class Person{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student extends Person{//继承父类Person
public Student(String name) {
super(name);
// TODO 自动生成的构造函数存根
}
}
//下限限定的类案例