我正在尝试做这样的事情:
private class aClass
{
private ArrayList<String> idProd;
aClass(ArrayList<String> prd)
{
this.idProd=new ArrayList<String>(prd);
}
public ArrayList<String> getIdProd()
{
return this.idProd;
}
}
所以,如果我有ArrayLIst<String>
(st1,st2,st3)的多个实例,并且我想创建aClass的新对象:
{
aClass obj1,obj2,obj3;
obj1=new aClass(st1);
obj2=new aClass(st2);
obj3=new aClass(st3);
}
如果我为每个对象(obj1..obj3)访问方法getIdProd(),是否所有的aClass对象都会返回st3? ArrayList作为实例变量自动声明为static?
答案 0 :(得分:4)
不,除非您已声明成员变量,否则成员变量不会自动为静态。我建议您重新格式化您的问题并发布其他背景信息,以便使您的问题更加清晰。很可能你得到的结果与你所期望的结果不同,原因不同于你的问题所暗示的结果。
答案 1 :(得分:1)
您可以从现有类中创建一个新的arraylist,它将现有元素的所有元素添加到新数组列表中。
但元素是相同的,因为数组列表不是“深度克隆”,这似乎是你寻找的。您必须构建一个构造函数,在所有元素上调用clone()并将克隆添加到类中的新数组列表中。
BTW:使用代码格式功能使您的问题更具可读性。编辑:哦,你在我发布这个答案的时候做到了:)
答案 2 :(得分:0)
数据成员不会自动为静态,除非您在接口内部声明它们(不常见)
由于您在构造函数中复制了数组列表,并且由于项类型是不可变的(String),因此aClass的不同实例可以在完全不同的ArrayList副本上工作。