(Joshua Bloch가 그의 책 Effective Java에서 설명한대로) ENUM 싱글 톤 인스턴스를 파일에 직렬화하려고합니다.ENUM 싱글턴 직렬화
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");
사람이 날 안내 주실 래요이 내가 뭘하는지입니다. 감사!
[편집]
정정 코드.
enum은 상태를 갖지 않아야합니다. 그리고 열거 형에 하나의 가치 만 있습니다. 당신이 일하는 데 잘못된 도구를 사용하고있는 것처럼 보입니다. 당신은 정규 싱글 톤 (클래스)만을 원하지 않습니까? 싱글 톤을 전혀 사용할 수 없습니까? – abyx
당신이 옳습니다. 나는 Enum이 무국적이어야한다는 것에 동의하지만, 나는이 종류의 열거 형을 우연히 발견했는지, 파일을 직렬화하는 방법이 될 수 있는지 알아보기 위해 노력하고있다. 나는 이것이 "좋은 디자인 관행"이라는 유행에서 이것을 묻지는 않는다는 점에 유의하십시오. 나는 "어떻게 이럴 수 있니?"라고 묻는 것뿐입니다. 이 클래스를 비 enum 싱글 톤 클래스로 변환하는 것은 그리 어렵지 않으므로 전체적으로 다음과 같이 요약 할 수 있습니다.이 클래스를 얻는다면 파일에 어떻게 쓰겠습니까? – ashokgelal
SnakeYAML은 enum을 스칼라로 취급합니다. (JavaBeanDumper에서 매핑 노드를 사용하지 않는 한) JavaBean과 같은 비정상적인 열거 형을 덤프 할 사용자 지정 표현자를 제공해야합니다. – Andrey