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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李哲 中级黑马   /  2012-3-29 17:42  /  2045 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

那个<?extends E:>还好理解。就视频里面说的类似多态,Person a=new Student();
但是<? super E>呢?难道仅仅是一种规定?规定下限?

不过,我想什么情况下用<? super E>,什么情况用<?extends E:>,API里面还是有不同的表明。不知道是基于什么理由?

<?extends E:>可以用多态解释
<? super E>呢?

TreeSet()的构造函数TreeSet(Comparator<? super E> comparator) 就使用<? super E>,我没搞明白。可能还是不太理解Comparator吧。

5 个回复

倒序浏览
这个也是多态的体现,比如你要给学生排序,那么你可以传入父类Comparator<Person>的比较器,这样这个比较器别的子类拿来也可以用,比较器里使用的方法要是父类中也有的方法
回复 使用道具 举报
<? super E>这种写法表明 将泛型的类型设定为E的超类。
TreeSet(Comparator<? super E> comparator),这个构造器告诉我们需要两个comparator类来进行比较两个元素。
如果 E是String类型,那么只要是String的父类都可以,比如Object,但是如果传Integer进去肯定是不行,? super E y就可以做这种限制,保证了构造器中的元素是可比较性的。
回复 使用道具 举报
我看教程里面的实例,和具体代码实现,两者都是多态体现,都是上限。不过这个也是符合道理的。只有多态可以解释。
回复 使用道具 举报
都是可以传入父类,子类也可以用。
回复 使用道具 举报
我有个想法,那就是实现接口,就用<?extends E:>
继承父类就用<? super E>
虽然两者都是传入父类,子类也可以用。但是<?extends E:>用于接口情况,<? super E>用于类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马