大虾们下面ArrayList 没有用泛型 for 循环编译错误,求原因,为什么必须的用泛型,急急急
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);
 }
     }泛型ArrayList

解决方案 »

  1.   

    很明显集合是为了保存对象的,默认的都是Object当你没有显示声明集合的保存类型,在使用for语句,他也是默认的是Object的,可惜Object是所有类的父类是不能赋值给子类Data的
      

  2.   

    因为你如果没有添加泛型的换 默认传入的元素师Object 类型,而你for循环里面 就相当于 把一个Object 的类型付给 Date 类型 这样编译器当然会报错了 你要是不想用泛型的话 可以试着把list的元素强转为Date类型
      

  3.   

    没用泛型就for(Object object : list)
      

  4.   

    你没有用泛型,那么编译器认为你的list里面可以放任意类型的Object,所以你遍历的时候,编译器认为你从list里面取出来的是Object类型,而你直接写成Date,编译器肯定不能放过你。解决方案是要么加泛型,要么类型转换,以下是类型转换:
    for (Object o : list) {
            Date d = (Date)o;
            System.out.println(d.val);
    }
      

  5.   

    list不声明泛型不就是保存的Object咯,得取出来再转
      

  6.   

    楼上的说的对。
    for (Data d : list) {
    这个里面默认了父类转子类,当然是不行。你可以这么写
     for (Param d : (ArrayList<Param>)list) {