0

我希望能够制作一个对象数组列表,然后能够编辑和读回每个对象的一些简单属性。在这种情况下, aString (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;
}
4

3 回答 3

1

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

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

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

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

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

(有时您确实需要它是具体类型,但通常更喜欢编程而不是接口。)

泛型是一个庞大的主题,但是在此答案开头链接的教程应该可以帮助您前进。Java 泛型常见问题解答是了解更多信息的绝佳资源。

于 2013-04-06T07:12:01.097 回答
0

改变

    ArrayList al = new ArrayList();

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

您现在拥有的是 的数组列表Object而不是 的数组列表MyObj,并且Object不知道MyObj.X

于 2013-04-06T07:12:03.780 回答
0

ArrayList<MyObj> al = new ArrayList<MyObj>();改为使用

于 2013-04-06T07:13:11.460 回答