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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM朱蛟 高级黑马   /  2013-4-5 17:01  /  1304 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM朱蛟 于 2013-4-5 18:28 编辑

求教泛型的下限应用在自定义类中的例子!!
能避免强转的,最好能结合代码讲解,谢谢了!!


6 个回复

倒序浏览

回帖奖励 +1

本帖最后由 邓宫财 于 2013-4-5 18:02 编辑

<? super MyClass>
一般我们能想到的用法是,
  1. void writeTo(List<? super Apple> apples){
  2. apples.add(new Apple());
  3. //apples.add(new Fruit());//这样做就类型不安全,违反了静态类型安全。
  4. }

  5. class Apple extends Fruit{}
  6. class Fruit{}
复制代码
这样使用更安全,更有用。
  1. public class GenericWriting {
  2.         /**
  3.          * 这样这个方法就可以将,T放入T的list中也可以放入T的父类的list中。
  4.          * @param <T>
  5.          * @param list
  6.          * @param item
  7.          */
  8.         public static <T> void  addWildcard(List<? extends T> list, T item){
  9.                 list.add(item);
  10.         }
  11.         public static void main(String[] args) {
  12.                 List<Apple> apples = new ArrayList<GenericWriting.Apple>();
  13.                 List<Fruit> fruit = new ArrayList<GenericWriting.Fruit>();
  14.                
  15.                 addWildcard(apples,new Apple());
  16.                 addWildcard(fruit,new Apple());
  17.                
  18.         }
  19.        
  20.         static class Apple extends Fruit{}
  21.         static class Fruit{}

  22. }
复制代码
这样跟List<? extends Fruit> list = new ArrayList<Apple>();区别太大了,这个一旦定义就只能装入Apple的对象了。


回复 使用道具 举报
邓宫财 发表于 2013-4-5 17:32
最喜欢沙发什么的了。占楼先。马上回答。

不会再ai了...今天有个姐们说他酝酿下 酝酿了一下午。。。。抢了沙发就闪人了啊。。。。。
回复 使用道具 举报
HM朱蛟 发表于 2013-4-5 17:41
不会再ai了...今天有个姐们说他酝酿下 酝酿了一下午。。。。抢了沙发就闪人了啊。。。。。 ...

大哥,这个问题,确实用得很少我也再研究呀。不好意思。
回复 使用道具 举报
邓宫财 发表于 2013-4-5 18:03
大哥,这个问题,确实用得很少我也再研究呀。不好意思。

谢谢 学习了
回复 使用道具 举报
HM朱蛟 发表于 2013-4-5 18:27
谢谢 学习了

没事的,同步进步。就是因为有人提问,才有更多的人去思考。所以这个也是黑马预期的效果吧。呵呵。
回答问题,容易上瘾。提问更容易上瘾。哈哈。
回复 使用道具 举报
只是今天版主,还没有出动也。求出现。嘿嘿。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马