java - 序列化 ENUM 单例

标签 java file serialization snakeyaml

我正在尝试将一个 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/

相关文章:

c - 将有关信号的数据保存在文件中?

java - 在与类文件不同的文件夹中查找资源

c++ - 反序列化中的文件损坏,如何防止崩溃?

java - AssertJ JUnitSoftAssertions 和 Guava 断言

java - 将数组多次分成象限

c - 如何在C程序中一个接一个地运行多个输入文件

php - 动态代理类的自定义 foreach 结果 - 魔术方法?

javascript - 自定义 JavaScriptConverter 类

java - 如何在tomcat中获取webapp的工作目录?

java - 线性回归的梯度下降不起作用