[英]Is an ArrayList automatically declared static in Java, if it is an instance variable?
我正在尝试做这样的事情:
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);
}
如果我为每个aClass对象(obj1..obj3)访问方法getIdProd(),所有aClass对象都会返回st3吗? 是否将ArrayList作为实例变量自动声明为静态?
不,除非您已声明成员变量,否则成员变量不会自动为静态。 我建议您重新格式化问题并发布其他上下文,以使您的问题更清楚。 您得到的结果很可能与您预期的结果有所不同,其原因与问题所暗示的原因不同。
您可以在类中从现有数组列表中创建一个新的数组列表,这会将现有数组列表的所有元素添加到新数组列表中。
但是,元素是相同的,因为数组列表不是“深度克隆”的,这似乎是您想要的。 您必须构建一个构造函数,该构造函数在所有元素上调用clone()并将克隆添加到类中的新数组列表中。
顺便说一句:使用代码格式功能可以使您的问题更具可读性。 编辑:哦,当我发布此答案时,您做到了:)
数据成员不是自动静态的,除非您在接口内部声明它们(不常见)
由于您在构造函数中复制了数组列表,并且项类型是不可变的(字符串),因此,aClass的不同实例可以在完全不同的ArrayList副本上工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.