package cn.itcast.api.a.generic;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import cn.itcast.domain.Person;
import cn.itcast.domain.Student;
import cn.itcast.domain.Worker;
public class GenericDemo_泛型的限定5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// List<Student> list = new ArrayList<Student>();
Set<Student> list = new HashSet<Student>();
// 1
list.add(new Student("lisisi1",20));
list.add(new Student("lisisi2",21));
list.add(new Student("lisisi3",22));
PrintList(list);
// 2
List<Worker> list2 = new ArrayList<Worker>();
list2.add(new Worker("lisisi11",20));
list2.add(new Worker("lisisi21",21));
list2.add(new Worker("lisisi31",22));
//将学生取出来
PrintList(list2);
}
//打印集合中的元素,发现当list变成set集合时,封装之后的打印方法不能使用
// 那么有没有既可以使用与List又能使用与Set集合呢?操作其父类Collection
// 当你不能保证传入的数据类型是什么时,可以使用通配符‘?’,这是一个实际参数
/*
* 如果想对打印的集合中的元素进行限制,只在指定的一些类型进行打印
* 那么就需要使用泛型的限定 有两个类型 Student Worker
* 那么只需要找到其父类型 Person
* 通配符 extends 父类型
*
* ? extends Person :接受Person类型或者Person的子类型
*? super E :接受E类型或者E的父类型 下限
*? extends E :接受E类型或者E的子类型 上限
*
*
*使用泛型要保证左右泛型一致
* **/
public static void PrintList(Collection</*Student*//*?*/? extends Person> list2) {
for (Iterator</*Student*//*?*/? extends Person> it = list2.iterator(); it.hasNext();) {//封装迭代器 选中--右键--refactor--extract method
/*Student student =it.next();*/
Person p = it.next();
System.out.println(/*student*//*it.next()*/p);
}
}
}
泛型的限定
最新推荐文章于 2024-03-06 11:11:27 发布