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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© KIWI 高级黑马   /  2014-4-6 09:36  /  878 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java泛型上限大致明白了,没听明白毕向东老师说的泛型下限问题,<? super E>应该在什么场景下用,为什么 要用?具体作用?求大神!谢谢了!

5 个回复

倒序浏览
本帖最后由 Kelvinhu 于 2014-4-6 10:29 编辑

可用于参数类型限定,参数化类型是此类型的父类型,直至Object
回复 使用道具 举报
百度一下,你就知道了!:lol
回复 使用道具 举报
qiubaoyang 发表于 2014-4-6 12:37
百度一下,你就知道了!

{:2_40:},{:2_40:}
回复 使用道具 举报
刚才开玩笑了。
这个要比较起来说明的,设置你所谓的上限下限是在参数声明的时候,其他情况不行
1 首先确定的泛型在new时只能new确定的泛型,且其可以使用add方法添加此类型和其子类的实例
2 如上面说的,这样类型就被定义的死死的,不利于多态,所以才有了<? extends Xxx>这种形式,表示list可以为泛型Xxx或者Xxx的子类型,但是这样也有弊端,就是你不能再用add方法,换句话说这样的泛型只能用来做参数传递读取里面的值,无法添加。
3 那么我还想add怎么办,于是有了<? super Xxx>的形式,这样在作为参数传递时候可以传递Xxx以及Xxx父类型的list进来,但是add只能是Xxx或者Xxx的子类(这个到哪都一样,没什么可说的),至于具体怎么用看你的需求了,好处坏处是参考着来的,谁也没比谁好到哪去,只能说各有各的方式,基本算回答你的问题了,下面的算额外附赠,望采纳
4 List<?> 任何类型可以传递进来,但不能再add
5 List<Object> 只能是类型<Object>,可以add
6 <?>和<? extends Object>意义相同

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 Peach2014 于 2014-4-6 14:15 编辑

我们来打个比方,
如果“E”表示你,
”就代表你的祖辈(因为java不支持多继承,所以这里就只算父辈(爸爸,爷爷,太爷爷...));
下限的意思就是以你为下限定,你的祖辈都可以接收使用,但是你的儿子,孙子不能被接收。
书面的说法就是:E的超类(父类,父类的父类……)对象都可以作为参数被接收进来,这个函数是向上兼容的。
这个思想应用得比较多的地方就是系统的更新:Win7可以兼容很多XP,Vista等系统软件。这样做可以保证许多软件不至于因为系统的更新而导致无法继续使用。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马