我正在尝试将一个 ENUM 单例实例(如 Joshua Bloch 在他的 Effective Java 一书中所描述的那样)序列化到一个文件中。 ENUM 实例是一个简单的 JavaBean,如下所示:
public enum ElvisFan implements Serializable{
INSTANCE;
private int totalSongsListened;
private ElvisFan(){
totalSongsListened=0;
}
public void set(int v){
totalSongsListened=v;
}
public int get(){
return totalSongsListened;
}
}
}
我在我的程序中成功地使用了这个枚举,但是当我使用 snakeyaml 将这个枚举写入文件时,我的 中只有
文件。这就是我正在做的:!!com.chown.ElvisFan 'INSTANCE'
>test.yaml
Yaml yaml = new Yaml();
yaml.dump(ElvisFan.INSTANCE, new FileWriter("test.yml");
我也尝试过这个但没有任何运气:
JavaBeanDumper dumper = new JavaBeanDumper();
dumper.dump(ElvisFan.INSTANCE, new FileWriter("test.yml");
有人可以指导我吗?谢谢!
[已编辑]
代码修正。
最佳答案
单例没有任何意义。可序列化的单例更没有意义。根据定义,只有一个单例。所以当你反序列化一个单例时,你不会得到一个新对象。您将获得具有相同旧数据的相同旧实例。
枚举序列化是专门处理的。它们由名称和类型表示。没有其他状态被保存,因为如前所述,这没有任何意义。
我建议修改您的代码以避免可变静态。
枚举不应该有可变状态。使用单个实例序列化枚举在它们实现一些其他类(例如 Comparator
)或用作键或类似的东西时很有意义。
关于java - 序列化 ENUM 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152872/