实现Serializable的单例类

//一个实现了Serializable 的单例类,必须有一个readResolve 方法,用以返回它的唯一的实例。
//对一个实现了Serializable 的类进行了扩展,或者实现了一个扩展自Serializable 的接口,
//使得我们在无意中实现了Serializable。


static class Dog extends Exception {
	public static final Dog INSTANCE = new Dog();
	private Dog() {}
	public String toString() {
		return "Woof";
	}
	//用于解决返回新实例的问题
	private Object readResolve() {
		return INSTANCE;
	}
}
static public Object deepCopy(Object obj) {
	try {
		ByteArrayOutputStream bos =
				new ByteArrayOutputStream();
		new ObjectOutputStream(bos).writeObject(obj);
		ByteArrayInputStream bin =
			new ByteArrayInputStream(bos.toByteArray());
		return new ObjectInputStream(bin).readObject();
	} catch(Exception e) {
		throw new IllegalArgumentException(e);
	}
}

猜你喜欢

转载自jaesonchen.iteye.com/blog/2297934