黑马程序员技术交流社区

标题: 【提问】问一个关于java泛型下限的问题 [打印本页]

作者: KIWI    时间: 2014-4-6 09:36
标题: 【提问】问一个关于java泛型下限的问题
java泛型上限大致明白了,没听明白毕向东老师说的泛型下限问题,<? super E>应该在什么场景下用,为什么 要用?具体作用?求大神!谢谢了!
作者: Kelvinhu    时间: 2014-4-6 10:26
本帖最后由 Kelvinhu 于 2014-4-6 10:29 编辑

可用于参数类型限定,参数化类型是此类型的父类型,直至Object

作者: qiubaoyang    时间: 2014-4-6 12:37
百度一下,你就知道了!:lol
作者: KIWI    时间: 2014-4-6 12:39
qiubaoyang 发表于 2014-4-6 12:37
百度一下,你就知道了!

{:2_40:},{:2_40:}
作者: qiubaoyang    时间: 2014-4-6 13:22
刚才开玩笑了。
这个要比较起来说明的,设置你所谓的上限下限是在参数声明的时候,其他情况不行
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>意义相同
作者: Peach2014    时间: 2014-4-6 14:07
本帖最后由 Peach2014 于 2014-4-6 14:15 编辑

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






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