黑马程序员技术交流社区

标题: 泛型限定的问题 [打印本页]

作者: P李勇    时间: 2015-4-4 00:38
标题: 泛型限定的问题
泛型限定:
上限:?extends E:可以接收E类型或者E的子类型对象。
下限:?super E:可以接收E类型或者E的父类型对象。

那么什么时候使用呢???如何使用呢??谁能举例


作者: P李勇    时间: 2015-4-4 00:40
坐等大神镇楼·!
作者: kapp_tolo    时间: 2015-4-4 00:42
额,也是说不清楚呀,不过应该底层二叉树数据结构的集合,需要进行自定义排序或者默认排序,会用到这个东西。
作者: P李勇    时间: 2015-4-4 01:06
kapp_tolo 发表于 2015-4-4 00:42
额,也是说不清楚呀,不过应该底层二叉树数据结构的集合,需要进行自定义排序或者默认排序,会用到这个东西 ...

{:3_51:}有例子吗
作者: 艺多不压身丶    时间: 2015-4-4 08:29
  1. package pack;
  2. // 泛型的限定:
  3.         // 上限:? extends E 可以接受E类型或E的子类类型对象。
  4.         // 下限:? super E 可以接受E类型或者E的父类类型对象。
  5. // 用了下限,这个集合只能当object型用了,必须进行强转
  6. import java.util.ArrayList;
  7. import java.util.Iterator;
  8. class Person{
  9.         private String name;
  10.         Person(String name){
  11.                 this.name=name;
  12.         }
  13.         public String getName(){
  14.                 return name;
  15.         }
  16. }
  17. class Student extends Person{
  18.         Student(String name){
  19.                 super(name);
  20.         }
  21. }
  22. class GenericDemo7{
  23.         public static void main(String[] args){
  24.                 ArrayList<Person> al=new ArrayList<Person>();
  25.                 al.add(new Person("abc :1"));
  26.                 al.add(new Person("abc :2"));
  27.                 al.add(new Person("abc :3"));
  28.                 al.add(new Person("abc :4"));
  29.                 printColl1(al);
  30.                 ArrayList<Student>la=new ArrayList<Student>();
  31.                 la.add(new Student("abc :1"));
  32.                 la.add(new Student("bcd :2"));
  33.                 la.add(new Student("cde :3"));
  34.                 la.add(new Student("def :4"));
  35.                 printColl2(la);
  36.         }
  37.         public static void printColl1(ArrayList<? extends Person> al){
  38.                 Iterator<? extends Person>it=al.iterator();
  39.                 while(it.hasNext()){
  40.                         System.out.println(it.next().getName());
  41.                 }
  42.         }
  43.         public static void printColl2(ArrayList<? super Student> al){
  44.                 Iterator<? super Student>it=al.iterator();
  45.                 while(it.hasNext()){
  46.                         Student s=(Student)it.next();
  47.                         System.out.println(s.getName());
  48.                 }
  49.         }
  50. }
复制代码

作者: P李勇    时间: 2015-4-4 13:46
艺多不压身丶 发表于 2015-4-4 08:29

{:3_51:}{:3_51:}学习一下
作者: schwiftX    时间: 2015-4-4 17:11
正在做这一章的日记,整理完了告诉你




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2