如何序列化抽象类

问题描述 投票:0回答:0

我正在使用 Gson 序列化我的对象,但我遇到了一个问题,即在我成功保存抽象对象后,您无法读取它们。我发现 this 与我的问题有关,但它在几个键槽上有所不同。主要是,我正在保存一个包含地图的对象,其中地图值包含对抽象类的引用。如果这个问题不存在,我的代码看起来会很干净这里是现在一切看起来的最小化版本。

private void recoverData() {
        final File file = new File(this.getDataFolder(), "data.json");

        if(file.exists() && file.length() > 2) {
            try {
                final Gson gson = new GsonBuilder().setPrettyPrinting().create();
                final Type type = new TypeToken<Map<String, DataObj>>() {}.getType();
                DataObj.DATA = gson.fromJson(new FileReader(file), type);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
public class DataObj implements Comparable<DataObj> {
   public static transient Map<String, DataObj> DATA = new HashMap<>();

   // This also contains 20+ more fields (but those all serialize fine)
   public final Map<Upgrades, PlayerUpgrades> upgradesMap = new HashMap<>();
} 
public abstract class PlayerUpgrades implements Serializable {
    public int level;

    public abstract String upgradeName();
    public abstract Integer maxLevel();
}

然后我有许多扩展

PlayerUpgrades
的“PlayerUpgrades”,但我不确定如何正确地让我的upgradesMap序列化。是否有一种方法可以在
PlayerUpgrades
中表示某些内容,以便我可以根据 upgradesMap 中的键手动创建每个类的新实例?我敢打赌,我可以尝试手动序列化我的 DataObj 中的所有内容,但由于我有大量字段,我觉得这需要一段时间,而且看起来很笨重,所以我应该如何处理这个问题?

java json serialization gson abstract
© www.soinside.com 2019 - 2024. All rights reserved.