首页 > 解决方案 > 如何使用 ArrayList 设置器加载对象

问题描述

我是初学者,我已经完成了这个项目。现在,我成功序列化了ArrayList中的对象,再次打开程序时,我希望程序加载数据。

但是,当我反序列化时,我使用另一个 ArrayList 并首先添加对象。然后,将其设置为原始的。它失败了。我不能再使用我的方法来调用它们。

我确信我正确地序列化了对象,我可以NimPlayer在反序列化时使用 getter 调用它们。

我如何序列化和反序列化:

private void saveData() {
    ArrayList<NimPlayer> playerList = nimModel.getPlayerList();
    if (playerList.size() != 0) {
        try {
            FileOutputStream fileOut =
            new FileOutputStream("players.dat.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(playerList);
            out.close();
            fileOut.close();
            System.out.printf("Serialized data is saved in players.dat.ser");
         } catch (IOException i) {
            i.printStackTrace();
         }

    } else {
        System.out.println("There is no data to be stored.");
    } 
}

 private void loadData(String fileName) {
 NimModel nimModel = new NimModel();
    try {
        FileInputStream fis = new FileInputStream(fileName);
        ObjectInputStream ois = new ObjectInputStream(fis);
        ArrayList<NimPlayer> newPlayerList = (ArrayList<NimPlayer>)ois.readObject();
        nimModel.setPlayerList(playerList);// I THOUGHT IT WOULD WORK

     } catch (IOException i) {
        i.printStackTrace();
        return;
     } 
}

这是我的NimPlayer课的一部分

public class NimPlayer implements Serializable  {

private final String userName;
private String familyName;
private String givenName;

private int gamesPlayed;
private int gamesWon;

public NimPlayer(String userName, String familyName, String givenName) {

    this.userName = userName;
    this.familyName = familyName;
    this.givenName = givenName;
    this.gamesPlayed = 0;
    this.gamesWon = 0;
}
//getter and setters
}

ArrayList 的 getter 和 setter 位于NimModel

public class NimModel {

private ArrayList<NimPlayer> playerList = new ArrayList<NimPlayer>();

public ArrayList<NimPlayer> getPlayerList() {
    return new ArrayList<NimPlayer>(playerList);
}

public void setPlayerList(ArrayList<NimPlayer> playerList) {
    this.playerList = playerList;
}
public void displayAllPlayers() {
    Collections.sort(playerList, (NimPlayer p1, NimPlayer p2) -> {
        return p1.getUserName().compareToIgnoreCase(p2.getUserName());
    });

    if (playerList.size() != 0) {
        for (NimPlayer player : playerList) {
            String userName = player.getUserName();
            String familyName = player.getFamilyName();
            String givenName= player.getGivenName();
            int gamesWon = player.getGamesWon();
            int gamesPlayed = player.getGamesPlayed();

            System.out.println(userName + "," + familyName + "," + givenName + "," + gamesPlayed + " games," + gamesWon + " wins");
        }
    } else {
        System.out.println("There is no players.");
    }

}
}

非常感谢任何帮助

参考

Java 中 ArrayList 的 Getter 和 Setter

在java中使用Getter和Setter作为arraylist

Java 中 ArrayList 的 Getter 和 Setter

标签: javaarraylist

解决方案


推荐阅读