有代码如下
public abstract class Parameter implements Serializable
{
static Map allParameters = new HashMap();
private String name;
private Parameter() {
// typesafe enum pattern, no public constructor
}
protected Parameter(String name) {
// typesafe enum pattern, no public constructor
this.name = name;
String key = makeKey(name);
if(allParameters.containsKey(key))
throw new IllegalArgumentException("Parameter name " + key + " already used!");
allParameters.put(key, this);
}
private String makeKey(String name){
return getClass() + " " + name;
}
public String toString() {
return name;
}
protected Object readResolve() throws ObjectStreamException {
Object par = allParameters.get(makeKey(name));
if(par == null)
throw new StreamCorruptedException("Unknown parameter value: " + name);
return par;
}
}
不是很理解 protected Object readResolve() throws ObjectStreamException 为什么要有这个函数
明明在Serializable中没有任何的函数需要实现
这个函数的代码我明白
但是搞不明白的是
1.为什么要有这个函数
2.这个函数在什么时候会被执行
3.这个函数有何意义.为什么jdk文档中没有这个函数的说明。
public abstract class Parameter implements Serializable
{
static Map allParameters = new HashMap();
private String name;
private Parameter() {
// typesafe enum pattern, no public constructor
}
protected Parameter(String name) {
// typesafe enum pattern, no public constructor
this.name = name;
String key = makeKey(name);
if(allParameters.containsKey(key))
throw new IllegalArgumentException("Parameter name " + key + " already used!");
allParameters.put(key, this);
}
private String makeKey(String name){
return getClass() + " " + name;
}
public String toString() {
return name;
}
protected Object readResolve() throws ObjectStreamException {
Object par = allParameters.get(makeKey(name));
if(par == null)
throw new StreamCorruptedException("Unknown parameter value: " + name);
return par;
}
}
不是很理解 protected Object readResolve() throws ObjectStreamException 为什么要有这个函数
明明在Serializable中没有任何的函数需要实现
这个函数的代码我明白
但是搞不明白的是
1.为什么要有这个函数
2.这个函数在什么时候会被执行
3.这个函数有何意义.为什么jdk文档中没有这个函数的说明。
readResolve() throws ObjectStreamException
抛出这个异常的例子很多。而且函数名也是如此的一致。并且都是实现了Serializable接口的。
我很疑惑 很纳闷。。所以才找大家帮忙给看下。
那如果这样的话
下面这4个都是约定吧 private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
Object writeReplace() throws ObjectStreamException;
Object readResolve() throws ObjectStreamException;
那这些约定.都应该如何写 如何定义呢? 譬如 如下的定义 是否符合标准。为什么private void writeObject(java.io.ObjectOutputStream out) throws IOException {
System.out.println("writeObject invoked");
out.writeObject(this.message == null ? "hohohahaha" : this.message);
}
private void readObject(java.io.ObjectInputStream in) throws IOException,
ClassNotFoundException {
System.out.println("readObject invoked");
this.message = (String) in.readObject();
System.out.println("got message:" + message);
}
private Object writeReplace() throws ObjectStreamException {
System.out.println("writeReplace invoked");
return this;
}
private Object readResolve() throws ObjectStreamException {
System.out.println("readResolve invoked");
return this;
}