Effective Java - 싱글 톤 보장을 유지하려면 은 모든 인스턴스 필드를 일시적으로 선언하고 'readResolve'메소드를 제공해야합니다. 필드를 일시적으로 선언하면 무엇을 얻을 수 있습니까?싱글 톤을 serialize하기위한 transient
에 관계없이 나는 일시적으로 '국가'변수를 선언 여부에....
....
public final class MySingleton implements Serializable{
private int state;
private MySingleton() { state =15; }
private static final MySingleton INSTANCE = new MySingleton();
public static MySingleton getInstance() { return INSTANCE; }
public int getState(){return state;}
public void setState(int val){state=val;}
private Object readResolve() throws ObjectStreamException {
return INSTANCE;
}
public static void main(String[] args) {
MySingleton c = null;
try {
c=MySingleton.getInstance();
c.setState(25);
FileOutputStream fs = new FileOutputStream("testSer.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(c);
os.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
FileInputStream fis = new FileInputStream("testSer.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
c = (MySingleton) ois.readObject();
ois.close();
System.out.println("after deser: contained data is " + c.getState());
} catch (Exception e) {
e.printStackTrace();
}
}
}
, 내가 c.getState() (25) 로 인쇄 gettign 얻을 내가 여기서 뭔가를 놓치고 있습니까 : 다음은 샘플입니까?
'상태'가 일시적이든 아니든간에 언급 한 바와 같이 결과는 다르지 않습니다. – IUnknown