黑马程序员技术交流社区

标题: 请问这段报错是什么意思???谁知道错在哪里? [打印本页]

作者: 韩超    时间: 2013-10-5 09:46
标题: 请问这段报错是什么意思???谁知道错在哪里?
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);
                   }
             }
      }



作者: 落木随风    时间: 2013-10-5 11:02
这个是因为你在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  验证消息就说  黑马论坛 就行了。
你要是觉得我回答的还可以的话就把给分给我吧,谢谢。
作者: 黄文伯    时间: 2013-10-5 14:11
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~




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