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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kellyzyb 中级黑马   /  2013-11-14 17:45  /  1250 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public void inspect(List<Object> list) {   
  2.     for (Object obj : list) {        
  3.         System.out.println(obj);   
  4.     }   
  5.     list.add(1);
  6. }
  7. public void test() {   
  8.     List<String> strs = new ArrayList<String>();   
  9.     inspect(strs); //编译错误
  10. }  
复制代码
为什么会出错呢 inspect方法中定义的泛型是Object啊,所有类型都能接收吧。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

3 个回复

倒序浏览
泛型的区别List<Object>与List<String>是定义两种类型, 一个接收Object类型,一个接收String类型
List<Object>已经把泛型确定了,可以定义成List<?> 用占位符?
回复 使用道具 举报
老师讲过,泛型里面没有继承这一说,你把他这句话没记住啊,这样写明显是错误的,这个参数类型不存在继承!
回复 使用道具 举报
  1. public void inspect(List<Object> list) {
  2. for (Object obj : list) {
  3. System.out.println(obj);
  4. }
  5. list.add(1);
  6. }
  7. public void test() {
  8. List<String> strs = new ArrayList<String>();
  9. inspect(strs); //编译错误
  10. }
复制代码
需要明确的是,你的想法是对的,但是这里你已经把类型给确定了。如果你传入的是一个Integer 类型怎么办,所以可以把<Object>改为<?>

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

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