黑马程序员技术交流社区

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

作者: Uncle.Lee    时间: 2013-11-12 20:56
标题: 关于泛型的限定
关于泛型的两种限定:
我把毕老师的视频看了两遍,还是赶脚有点晕菜;
?extends E :上限
? super E:下限

我感觉上下限好像都差不多,那位大神能帮忙我理解他们的区别,,3Q
作者: ysunday    时间: 2013-11-12 21:10
?extend E是说只要是继承了E的都可可以
举例来说吧
class Person{}
class Student extends Peson{}
class Teacher extends Person{}
如果这么写<? extends Person>这就是说只要是Person的子类都可以放到这接收,
比如student 和 teacher都可以 就是只要是E的儿子都可可以放在这里<? extend E>代替完是这个样子<Student s> 或者<Teacher t>

? super E是说只要是E的父类都可以,你可以把extends念成  《E的儿子都可以放这》
而把super念成 《E的父亲都可以放这》
举个例子
class Person{}
class Student extends Peson{}
如果写成<? super Student>就是说只要是Student的父类都能接收,比如Person。
作者: lichao    时间: 2013-11-12 21:21
?extends E :上限
就是E本身及子类、子类的子类等。如:
  1. public static void printColl(Collection<? extends Person> al)
  2.         {
  3.                 Iterator<? extends Person> it = al.iterator();


  4.                 while(it.hasNext())
  5.                 {
  6.                         System.out.println(it.next().getName());
  7.                 }
  8.         }
复制代码
在调用此方法是传递进来的参数只能是Person类及Person的子类、子类的子类等。
? super E:下限
就是E本身及父类、父类的父类等
如:
  1. public static void printColl(Collection<?
  2. <span style="background-color: rgb(255, 255, 255); ">super </span> Person> al)
  3. {
  4. Iterator<?
  5. <span style="background-color: rgb(255, 255, 255); ">super </span> Person> it = al.iterator();


  6. while(it.hasNext())
  7. {
  8. System.out.println(it.next().getName());
  9. }
  10. }
复制代码
在调用此方法是传递进来的参数只能是Person类及Person的父类、父类的父类等。
作者: To    时间: 2013-11-13 00:37
挺好的,以后发动大家伙都来云七发帖,有肉吃




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