黑马程序员——泛型限定
2014-12-23 20:55
323 查看
当我们要遍历集合的元素时比如ArrayList,如果有多个集合但是集合的储存类型不同时我们可以定义一个方法完成不同类型集合的遍历
这个方法有个"?" ,该符号是一个占位符,它的意思是传什么类型的ArrayList集合它都可以接受
为何要用这个“?”?
看例子
所以要使用"?",如果要想把装Persons对象的集合和装Student对象的集合都传给print方法,这里的参数就需要改变
这个用法叫做泛型限定,泛型限定有两种
? extends E 这个是向上限定,这样可以接受E类或者它所有的子类
? super E 这个是向下限定,这样可以接受E类或者它的所有父类
public class Test { public static void main(String[] args) { //储存string类型的ArrayList ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); //储存int类型的ArrayList ArrayList<Integer> list1 = new ArrayList<Integer>(); list1.add(1); list1.add(2); list1.add(3); print(list); System.out.println("----------"); print(list1); } //完成对多个不同的类型ArrayList集合遍历 public static void print(ArrayList<?> list){ Iterator<?> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
这个方法有个"?" ,该符号是一个占位符,它的意思是传什么类型的ArrayList集合它都可以接受
public static void print(ArrayList<?> list){ Iterator<?> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } }
为何要用这个“?”?
看例子
public class Test { public static void main(String[] args) { //储存string类型的ArrayList ArrayList<Persons> list = new ArrayList<Persons>(); list.add(new Persons("aaa")); list.add(new Persons("vvv")); list.add(new Persons("bbb")); //储存int类型的ArrayList ArrayList<Students> list1 = new ArrayList<Students>(); list1.add(new Students("aaa")); list1.add(new Students("ccc")); list1.add(new Students("vvv")); print(list); System.out.println("----------"); <span style="color:#ff0000;">print(list1);//这里报错,因为无法将储存Persons对象的集合传给储存Students对象的集合</span> } //完成对多个不同的类型ArrayList集合遍历 public static void print(ArrayList<Persons> list){ Iterator<Persons> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } } class Persons { private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public Persons(String name){ this.name = name; } } class Students extends Persons{ public Students(String name) { super(name); } }
所以要使用"?",如果要想把装Persons对象的集合和装Student对象的集合都传给print方法,这里的参数就需要改变
public static void print(ArrayList<<span style="color:#ff0000;">? extends Persons</span>> list){ Iterator<? extends Persons> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next().getName()); } }
这个用法叫做泛型限定,泛型限定有两种
? extends E 这个是向上限定,这样可以接受E类或者它所有的子类
? super E 这个是向下限定,这样可以接受E类或者它的所有父类
相关文章推荐
- 黑马程序员_日记55_TreeSet、泛型限定和比较器限定方式的综合运用方式
- 黑马程序员_day15 TreeSet,二叉树,实现Comparator方式排序,泛型,泛型接口,泛型限定)
- 黑马程序员——泛型限定,上限,下限
- 黑马程序员--集合框架---泛型限定
- 黑马程序员--Java基础加强--02.代码简化 书写规律I_原始数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】
- 黑马程序员--08.泛型--02.【泛型方法】【泛型接口】【泛型限定的基本使用】【个人总结】
- 黑马程序员--Java基础加强--06.【泛型通配符限定】【个人总结】
- 黑马程序员——集合框架(泛型限定)
- 黑马程序员_日记52_泛型限定初级使用
- (黑马程序员)泛型限定原理和使用(一)
- 黑马程序员——泛型、泛型限定
- (黑马程序员)泛型的限定原理和使用(二)
- 黑马程序员------集合框架(No.4)(泛型、泛型类、泛型方法、泛型接口、泛型限定)
- 黑马程序员_java对泛型的限定: <? extends E > , < ? super E > 的理解和体会。
- 黑马程序员--Java基础加强--03.代码简化 书写规律II_参数化数据类型【重载】【多态】【泛型】【泛型限定】【个人总结】
- 黑马程序员—Java基础加强学习笔记之泛型
- 黑马程序员_泛型详解
- 黑马程序员------第11天笔记(泛型)
- 黑马程序员 JAVA__高新技术--泛型总结
- 黑马程序员_java集合框架与泛型详解