【发布时间】:2022-01-10 05:54:18
【问题描述】:
所以我的问题有点复杂。我有一个 User 类,我将它放入 ConcurrentHashMap
我正在使用 GSON 序列化这个 ConcurrentHashMap 并保存我的用户的数据。
在用户类内部,我有多个变量(整数、字符串等)和几个集合。 问题在于覆盖文件。我的 4 个 ArrayList 中有 2 个像往常一样序列化,但是当我添加另一个 ArrayList 或任何与此相关的集合时,该集合不会显示在文件中。但是,当我添加一个简单的变量(例如 String 或 Int)时,文件会更新并为每个用户附加这些值。创建新用户时,这些集合显示为什么都没有发生。我需要为现有用户添加这些集合。
我的问题是为什么不能在类中添加另一个 ArrayList,以及为什么它没有出现在文件中。
public class User {
private String nickname;
private String id;
private int coins;
...bunch of variables
private int bikes = 0;
private int scooters = 0;
private int goldIngots = 0;
private final ArrayList<Car> cars = new ArrayList<>(); //showing up
private final ArrayList<Hotel> hotels = new ArrayList<>(); //showing up
private final ArrayList<AwardType> awards = new ArrayList<>(); //not showing up
...Constructor
...Getters And Setters
编辑
AwardType 是一个枚举。此包含 AwardType 的列表不会显示给现有用户,只会显示给新用户。
编辑 1
添加 Gson serializeNulls() 选项后,列表被添加到文件中,但为空。
"bikes": 0,
"scooters": 0,
"goldIngots": 0,
"cars": [],
"hotels": [],
"awards": null
【问题讨论】:
-
请不要张贴您的代码图片;贴出实际代码。
-
@LouisWasserman 对不起,这是我在 StackOverflow 上的第一篇文章,我将在编辑中发布我的代码。
-
你的
User类有无参数构造函数吗?当 Gson 找不到无参数构造函数时,它会创建一个实例而不调用任何构造函数或初始化程序块(因此也不分配默认值)。请尝试添加一个无参数构造函数(可以是private),看看是否有帮助。 -
@Marcono1234 我有 3 个参数给构造函数。这 3 个参数是昵称、id 和硬币。其余变量由我分配给默认值。例如 int bikes 变量默认等于 0。我有诸如 setBikes() 之类的方法来操作这些数字。
-
我会尝试按照您的建议添加无参数构造函数。
标签: java serialization collections gson