Java ArrayList - 无法读回对象的属性

时间:2013-04-06 07:10:08

标签: java object arraylist

我希望能够创建一个对象的数组列表,然后能够编辑和回读每个对象的一些简单属性。在这种情况下,String (colour)integer (X)。我似乎无法使下面的简单代码工作。请注意,我知道人们有时会使用<>有数组列表的符号,但我已经读过它应该可以没有,而且目前我对Java很新,并希望尽可能简单。

此刻我在注释掉的行上找不到错误(找不到符号X)

import java.util.ArrayList;

public class ArrayList_of_Objects {

 public static void main(String[] args)
    {

        ArrayList al = new ArrayList();

        for(int i =0;i<5;i++)
        {
            MyObj ob1 = new MyObj();
            ob1.X = i + 5;
            al.add(ob1);
            //System.out.println("X: "+al.get(i).X);
        }
        for(int j=0;j<5;j++)
        {System.out.println("X: "+al.get(j).X);}

        al.get(3).X=4;
        al.get(3).colour="orange";
        System.out.println(al.get(3).X);
        System.out.println(al.get(3).colour);
  } 

}

class MyObj
{
    int X;
    String colour;
}

3 个答案:

答案 0 :(得分:1)

是的,您需要使用generics来说明列表中的对象类型:

ArrayList<MyObj> al = new ArrayList<MyObj>();

否则编译器不知道al.get(3)意味着返回MyObj而不是任何东西。使用此代码,它不仅可以修复get次调用 - 它还可以阻止您意外地将不适当类型的对象添加到列表中。

此外,通常首选将变量声明为适当的接口类型,例如:

List<MyObj> al = new ArrayList<MyObj>();

(有时你真的需要它作为具体类型,但通常更喜欢编程到接口。)

泛型是一个大量的主题,但是在本答案开头链接的教程应该可以帮到你。 Java Generics FAQ是了解更多信息的绝佳资源。

答案 1 :(得分:0)

更改

    ArrayList al = new ArrayList();

    ArrayList<MyObj> al = new ArrayList<MyObj>();

您现在拥有的是Object的数组列表,而不是MyObj的数组列表,Object不了解MyObj.X

答案 2 :(得分:0)

使用ArrayList<MyObj> al = new ArrayList<MyObj>();代替