java序列化枚举单例
我试图将一个ENUM单例实例(如Joshua Bloch在其著作《有效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");
有人能在这方面指导我吗。谢谢
[编辑]
代码更正
# 1 楼答案
SnakeYAML将列表视为序列,而不是映射,即使列表也有getter(getFirst())。 为什么希望枚举序列化为映射
您必须提供一个定制的Representer来转储像JavaBean这样不寻常的枚举。 测试中包含了大量如何编写自定义Representer/构造函数的示例