有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    SnakeYAML将列表视为序列,而不是映射,即使列表也有getter(getFirst())。 为什么希望枚举序列化为映射

    您必须提供一个定制的Representer来转储像JavaBean这样不寻常的枚举。 测试中包含了大量如何编写自定义Representer/构造函数的示例