Вобще у ArrayList есть методы setAll/addAll()
Раз objects можно перебрать в for, то его можно зарядить и туда. Эти методы пережевывают все с интерфейсом Serializable.
Другими словами:
array.addAll(objects);
Раз уж field это самописный класс, то просто добавте метод возвращающий objects, чонить типа этого: array.addAll(field.getObjects());
Попробовал начинает ругаться IDE, поэтому сделал внес изменения в метод moveAll()
класса Field
List<String> list = new ArrayList<String>();
void moveAll() {
for (GameObject o : objects) {
Spot spot = o.move();
String s = o + " moved to " + spot;
list.add(s);
System.out.println(s);
}
}
Теперь другая проблема - вывод сохраняется в файл, но в НЕчитаемом виде ��
КАК ЗАПИСЫВАТЬ В НОРМАЛЬНОМ ВИДЕ?
FileOutputStream fout = new FileOutputStream("D:\\Users\\src\\save");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(field); // вот здесь косяк, сохраняю весь класс
oos.close();
FileInputStream fin = new FileInputStream("D:\\Users\\src\\save");
ObjectInputStream ois = new ObjectInputStream(fin);
Object s = ois.readUnshared();
System.out.println(s);
ois.close();
ObjectInputStream - запись как не сложно догадаться ObjectОВ.
А вам надо FileWriter. Вот первая ссылка metanit.com/java/tutorial/6.8.php
Записывать надо примерно так:
for (String text: list){
writer.write(text);
}
Тоесть теребить надо сам ArrayList а не объект field.
Вообще довольно странно, на весь класс бы посмотреть.
Есть гетер для objects?
Если есть, используйте его для получения и добавляйте методом addAll() все сразу в лист.
public class Game implements Serializable {
public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException, NotSerializableException {
Field field = new Field();
GameObject player = new Player();
field.addObject(player);
for (int i = 0; i < 10; i++) {
field.moveAll();
Thread.sleep(10);
}
FileOutputStream fout = new FileOutputStream("D:\\Users\\src\\save");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(field);
oos.close();
FileInputStream fin = new FileInputStream("D:\\Users\\src\\save");
ObjectInputStream ois = new ObjectInputStream(fin);
Object s = ois.readObject();
System.out.println(s);
ois.close();
}
public class Field implements Serializable {
List<GameObject> objects = new ArrayList<>();
public void addObject(GameObject o) {
objects.add(o);
}
List<String> list = new ArrayList<String>();
void moveAll() {
for (GameObject o : objects) {
Spot spot = o.move();
String s = o + " moved to " + spot;
list.add(s);
System.out.println(s);
}
}
}
cot032: Либо, как вариант, можете сразу писать объект не только в field, но и в ArrayList, после чего получать его через geter. Но это оверхед по памяти.
public List getObjects(){
return objects;
}
Но есть НО: если ваши объекты должны остаться неизменными, лучшей практикой будет возвращать копию objects.
PS: добавьте проверки по вкусу.