Хорошо, вот код, а затем следует обсуждение:
public class FlatArrayList {
private static ArrayList<TestWrapperObject> probModel = new ArrayList<TestWrapperObject>();
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] currentRow = new int[10];
int counter = 0;
while (true) {
for (int i = 0; i < 10; i++) {
currentRow[i] = probModel.size();
}
TestWrapperObject currentWO = new TestWrapperObject(currentRow);
probModel.add(counter, currentWO);
TestWrapperObject testWO = probModel.get(counter);
// System.out.println(testWO);
counter++;
if (probModel.size() == 10) break;
}
// Output the whole ArrayList
for (TestWrapperObject wo:probModel) {
int [] currentTestRow = wo.getCurrentRow();
}
}
}
public class TestWrapperObject {
private int [] currentRow;
public void setCurrentRow(int [] currentRow) {
this.currentRow = currentRow;
}
public int [] getCurrentRow() {
return this.currentRow;
}
public TestWrapperObject(int [] currentRow) {
this.currentRow = currentRow;
}
}
Что должен делать приведенный выше код? То, что я пытаюсь сделать, это загрузить массив в качестве члена некоторого объекта-оболочки (TestWrapperObject в нашем случае). Когда я выхожу из цикла,
Аргумент probModel ArrayList имеет количество элементов, которые он должен иметь, но все они имеют одинаковое значение последнего элемента (массив размером 10 с каждым элементом равным 9). Это не тот случай внутри цикла. Если вы выполняете тот же «эксперимент» с примитивным значением int, все работает нормально. Я что-то упускаю из-за массивов как членов объекта? Или я только что столкнулся с ошибкой Java? Я использую Java 6.