我正在使用 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 中的所有内容,但由于我有大量字段,我觉得这需要一段时间,而且看起来很笨重,所以我应该如何处理这个问题?