我試圖序列化一個ENUM單例實例(如Joshua Bloch在他的書Effective Java中所述)到一個文件中。枚舉實例是一個簡單的JavaBean,因爲這:序列化ENUM Singleton
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文件,我只是在我的test.yaml
文件!!com.chown.ElvisFan 'INSTANCE'
。這是我在做什麼:
Yaml yaml = new Yaml();
yaml.dump(ElvisFan.INSTANCE, new FileWriter("test.yml");
我也試過這個沒有任何的運氣:
JavaBeanDumper dumper = new JavaBeanDumper();
dumper.dump(ElvisFan.INSTANCE, new FileWriter("test.yml");
有人可以請指導我在此。謝謝!
將帖子
碼校正。
枚舉不應該有狀態。你在枚舉中只有一個值。看起來你正在使用錯誤的工具來完成這項工作。你不是隻想要一個普通的單身人士嗎?你不能不使用單身人士嗎? – abyx 2010-01-28 08:26:32
你說得對。我同意Enum應該是無狀態的,但我只是試着去看看我是否偶然發現過這種枚舉,可能是序列化文件的方式。請注意,我不是在「這是一個很好的設計實踐」的時尚問題。我只是問「我該怎麼做?」將這個類轉換爲非枚舉單例類並不難,所以總的來說,如果你得到這樣的類,你會如何寫入一個文件? – ashokgelal 2010-01-28 08:37:34
SnakeYAML將枚舉視爲標量。 (除非你強制它使用JavaBeanDumper中的映射節點) 你必須提供一個自定義的Representsenter來轉儲JavaBean這樣的異常枚舉。 – Andrey 2010-01-28 11:05:13