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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fufeng 中级黑马   /  2014-6-6 13:54  /  1387 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Collection<? extends Object>collection6 =
   new ArrayList<String>();
  collection.add("aaa");
上面编译正确

下面编译失败
Collection<? extends Integer>collection7 =
   new ArrayList<Integer>();
  Integer i = new Integer(122);
  collection7.add(i);

这是为什么呢? 感觉这两段代码,其实其实每什么区别,怎么实现起来区别这么大?

6 个回复

倒序浏览
谁说上面的可以编译通过。上面的也错!
再说你的代码是不是复制多了,collection.add("aaa"),哪有collection这个变量,明明是collection6嘛!
两个全错,左右泛型不一致,错!但是左边不写,只是告警(新版本兼顾老版本)
回复 使用道具 举报
表示没看懂
回复 使用道具 举报
还没看到那,先瞅瞅{:3_62:}
回复 使用道具 举报
谭荣强 发表于 2014-6-8 05:57
谁说上面的可以编译通过。上面的也错!
再说你的代码是不是复制多了,collection.add("aaa"),哪有collecti ...

上面个 左边是向上限定,Object的子类都行, 右边是String 为什么错?
回复 使用道具 举报
这代码写的,看的是懂非懂啊!
回复 使用道具 举报
倪大大 发表于 2014-6-8 13:40
上面个 左边是向上限定,Object的子类都行, 右边是String 为什么错?

左边的容器容器可以接收Object.而在右边你又将容器限定在Strting.
那么左边本来还可以装别的,例如Integer,一限定就不能装了。
理解有点困难。
总之一句话:左移保持一致
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马