A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Uncle.Lee 中级黑马   /  2013-11-12 20:56  /  1086 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于泛型的两种限定:
我把毕老师的视频看了两遍,还是赶脚有点晕菜;
?extends E :上限
? super E:下限

我感觉上下限好像都差不多,那位大神能帮忙我理解他们的区别,,3Q

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
To + 1 + 2 赞一个!

查看全部评分

3 个回复

倒序浏览
?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。

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
To + 1 + 2 赞一个!

查看全部评分

回复 使用道具 举报
?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的父类、父类的父类等。

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
To + 1 + 2 很给力!

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-11-13 00:37:51
板凳
挺好的,以后发动大家伙都来云七发帖,有肉吃
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马