黑马程序员技术交流社区

标题: 求教泛型的下限能用在自定义类中吗? [打印本页]

作者: HM朱蛟    时间: 2013-4-5 17:01
标题: 求教泛型的下限能用在自定义类中吗?
本帖最后由 HM朱蛟 于 2013-4-5 18:28 编辑

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



作者: 随便    时间: 2013-4-5 17:32
本帖最后由 邓宫财 于 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的对象了。



作者: HM朱蛟    时间: 2013-4-5 17:41
邓宫财 发表于 2013-4-5 17:32
最喜欢沙发什么的了。占楼先。马上回答。

不会再ai了...今天有个姐们说他酝酿下 酝酿了一下午。。。。抢了沙发就闪人了啊。。。。。
作者: 随便    时间: 2013-4-5 18:03
HM朱蛟 发表于 2013-4-5 17:41
不会再ai了...今天有个姐们说他酝酿下 酝酿了一下午。。。。抢了沙发就闪人了啊。。。。。 ...

大哥,这个问题,确实用得很少我也再研究呀。不好意思。
作者: HM朱蛟    时间: 2013-4-5 18:27
邓宫财 发表于 2013-4-5 18:03
大哥,这个问题,确实用得很少我也再研究呀。不好意思。

谢谢 学习了
作者: 随便    时间: 2013-4-5 18:29
HM朱蛟 发表于 2013-4-5 18:27
谢谢 学习了

没事的,同步进步。就是因为有人提问,才有更多的人去思考。所以这个也是黑马预期的效果吧。呵呵。
回答问题,容易上瘾。提问更容易上瘾。哈哈。
作者: 随便    时间: 2013-4-5 18:30
只是今天版主,还没有出动也。求出现。嘿嘿。




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