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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        Type mismatch: cannot convert from element type Object to Data

        at Test.main(Test.java:17)
-------------------------------------------------
import java.util.ArrayList;

        class Data {
            int val;
        }

        public class Test {
                  public static void main(String args[]) {
                           Data data = new Data();
                           ArrayList list = new ArrayList();

                   for (int i = 100; i < 103; i++) {
                           data.val = i;
                           list.add(data);
                   }
就是这里报错-----> for (Data d : list) {
                          System.out.println(d.val);
                   }
             }
      }


评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1

查看全部评分

2 个回复

倒序浏览
这个是因为你在for循环里面没有指定泛型,而没有指定泛型的话,list中默认返回的是Object类型的对象,所以会报错。
这里有两种改正方法:
第一种:
import java.util.ArrayList;
import java.util.List;

class Data {
        int val;
}

public class Test {
        public static void main(String args[]) {               
                Data data = null; //把data放在for循环中进行实例化
                List<Data> list = new ArrayList<Data>(); //为list指定泛型,同时将左边的改为List,因为这样体现了面向接口编程的思想
                for (int i = 100; i < 103; i++) {
                        data = new Data(); // 把data放在for循环里面进行实例化,才可以保证list中会存放每一个对象,否则list中只是存放了for循环中最后一个对象
                        data.val = i;
                        list.add(data);
                }
                for (Data d : list) {
                        System.out.println(d.val);
                }
        }
}
第二种:
import java.util.ArrayList;

class Data {
        int val;
}

public class Test {
        public static void main(String args[]) {
                Data data = null; //data还是需要放在for循环中进行实例化
                ArrayList list = new ArrayList();

                for (int i = 100; i < 103; i++) {
                        data = new Data();
                        data.val = i;
                        list.add(data);
                }
                for (Object d : list) { // 由于你没有指定泛型,所以list返回的是Object类型的对象
                        System.out.println(((Data)d).val);  // 在输入中进行强制转换就可以了
                }
        }
}

上面这两种方法都可以正确运行,但是建议使用第一种,因为这样更安全,也体现了面向对象。要是还有疑问可以加我QQ:391720181  验证消息就说  黑马论坛 就行了。
你要是觉得我回答的还可以的话就把给分给我吧,谢谢。

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马