关于通配符的总结 给楼主看看 看看就懂了
对集合中的元素进行迭代的功能,因为打印集合中的元素类型是不确定的,无法明确,可以使用泛型中的通配符来完成,该通配符用?来标示,
如果要对操作的类型进行限定,只操作一部分类型时,可以使用泛型的高级功能,泛型的限定。
? Extends E:可以接收E类型和E的子类型。
? SuperE:可以接收E了性或者E的父类型。
实现代码:
Public static void printCollection(Collection<? Extedns Person> coll){
Iterator<? extends Person> it = coll.iterator();
while(it.hasNext()){
// Student stu = it.next();
Person p = it.next();
System.out.println(p.getName()+"-----"+p.getAge());
}
}
什么时候使用E extends?
一般在存储具体引用类型时使用这种情况,因为存储E类型或者E类型的子类,这时可以保证类型是安全的。
实现代码:
public static void main(String[] args) {
Collection<Person> coll = new ArrayList<Person>();
coll.add(new Person("abc1",21));
coll.add(new Person("abc2",22));
Collection<Student> coll2 = new ArrayList<Student>();
coll2.add(new Student("lisi1",31));
coll2.add(new Student("lisi2",32));
coll2.add(new Student("lisi3",33));
Collection<Worker> coll3 = new ArrayList<Worker>();
coll3.add(new Worker("lisi11",31));
coll3.add(new Worker("lisi22",32));
coll.addAll(coll2);
coll.addAll(coll3);
Iterator<Person> it = coll.iterator();
while(it.hasNext()){
Person stu = it.next();
System.out.println(stu.getName());
}
}
泛型下限:
下限什么时候用?
从集合中取出对象进行操作时,可以使用下限。比如:比较器。无论集合中的元素对象的类型是什么,只要比较器的指定的类型可以接受这些对象完成比较,就可以了。所以比较器的类型,可以是集合中当前元素的类型,也是可以该元素类型的父类型。 |