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