解决方案 »

  1.   

    因为把food放到ArrayList中之后,food就变成object类型了,拿出来之后需要强制变换。 如果不想强制变换,可以使用泛型。
      

  2.   

    这个地方是java泛型,你开始定义arraylist的时候没有指定类型,而当你进行插入操作的时候往里面插入的是food类型,所以取出的时候需要进行类型转换,建议在定义容器时就进行指定容器存储类型,如下所示:
    ArrayList<food> A = new ArrayList<food>();
    这样取出的时候就不需要进行类型转换了,如下所示
    food print = A.get(i); // ********************************
      

  3.   

    你的ArrayList没用泛型,用了就不需要强转了
      

  4.   


    ArrayList A=new ArrayList(); 问题在这里
      

  5.   

    你也可以当object对象来处理啊,只不过那样的话,就不能像你上面那么写了.可以这样写:
    for(int i=0;i<A.size();i++){ //ArrayList的遍历
    Object[] print=(Object[])A.get(i);                 //********************************
    System.out.println("第"+i+"个食品为:"+print[0]);
    }
      

  6.   

    还有一个问题,类名首字母大写哦。food  --   Food
      

  7.   

    你好,其实你的这个问题可以不用去问的,要养成独立思考的习惯,你的这个问题看看JavaSE开发帮助文档list里面的get方法就可以一目了然了,还有就是你要注意养成良好的编码习惯,比如类的名字首字母大写,变量名字首字母要小些,像你那样写的话也没有问题,只是不太规范哦
      

  8.   

    因为把food放到ArrayList中之后,food就变成object类型了,拿出来之后需要强制变换。 如果不想强制变换,可以使用泛型。
    不强转的话,可以使用建议在定义容器时就进行指定容器存储类型,如下所示:ArrayList<Food> A = new ArrayList<Food>();//建议类名大写
      

  9.   

    问题1:为什么要强制转换A.get(i)?
     因为你的ArrayList A=new ArrayList();并没有指定具体的类型,
    源代码中定义:public ArrayList() {
            super();
            this.elementData = EMPTY_ELEMENTDATA;
        }
    private transient Object[] elementData;也就是说elementData是Object类型。如果你不强制转换,显示错误Type mismatch: cannot convert from Object to food。也就说是不能从object类型转换成food类型。你可能会想,我明明是food类型啊,为什么在集合里面变成了object类型。那么因为在A.add(a);的时候就把foot类型转换成了object类型。问题2:为什么可以强制转换A.get(i)?
    这个问题涉及到向上转型和向下转型。向上转型是安全的,向下转型可能是不安全的。这时候object类型转为food类型是安全的,为什么,因为a,b,c本来就是一个food实例,我们把它转回去,当然不会出错。所以说可以转。但是如果a,b,c不是food实例,转就会出现问题。建议你看看ArrayList源码和向下向上混合转型的相关知识。