我从表单中收集一些值,我将它们添加到ArrayList然后创建一个对象。
ArrayList<Integer> machines = new ArrayList<>();
ArrayList<WorkPosition> workPositions = new ArrayList<>();
for (int i=1; i<=positions; i++){
fname1 = "position"+i+"-1";
fname2 = "position"+i+"-2";
fname3 = "position"+i+"-3"
m1 = Integer.parseInt(request.getParameter(fname1));
m2 = Integer.parseInt(request.getParameter(fname2));
m3 = Integer.parseInt(request.getParameter(fname3));
if(m1!=0)
machines.add(m1);
if(m2!=0)
machines.add(m2);
if(m3!=0)
machines.add(m3);
WorkPosition workPosition = new WorkPosition(0, i, machines, false, date); //Here I create the Object
workPositions.add(workPosition);
machines.clear();
}
在我创建对象(键入WorkPosition)并将其添加到我的列表后,我删除了ArrayList机器,因此将在第二个循环中创建的下一个对象没有上一个对象的元素。但是,当我在循环结束时打印arraylist机器以查看它具有的内容
for(WorkPosition i:workPositions){
System.out.println("WorkPosition " +i.getWorkPosition() + " :" + " Machines{ "+ i.getMachines() +" }");
}
在班级机器中,我有这个吸气剂:
public class WorkPosition {
private int workPosition;
ArrayList<Integer> machines = new ArrayList<>();
//more code...
public ArrayList<Integer> getMachines() {
return machines;
}
我得到这个印刷品:
WorkPosition 1 : Machines{ [] }
WorkPosition 2 : Machines{ [] }
任何想法为什么会发生这种情况?如果我删除了machines.clear();
我得到了这个输出:
WorkPosition 1 : Machines{ [1, 15] }
WorkPosition 2 : Machines{ [1, 15] }
然而,欲望输出将是:
WorkPosition 1 : Machines{ [1] }
WorkPosition 2 : Machines{ [15] }
更新
我将ArrayList<Integer> machines = new ArrayList<>();
放在循环中并删除machines.clear()
并且它有效..
答案 0 :(得分:2)
创建WorkPosition时,为其提供对机器的引用。因此,当您调用machines.clear()
时,也会清除WorkPosition中的机器ArrayList。
相反,您应该将机器设置为新的ArrayList:
machines = new ArrayList<Integer>();
这将清除机器,同时保持WorkPosition中的ArrayList不变。