这是我的小班:
import java.io.Serializable;
public abstract class SerializableCallback extends Callback
implements Serializable {
private static final long serialVersionUID = 4544768712188843966L;
public abstract void handleMessage(Message msg);
}
这是它更简单的父级回调:
public abstract class Callback {
public abstract void handleMessage(Message msg);
}
这是我的测试:
public void testSerialization() throws IOException, ClassNotFoundException {
SerializableCallback c = new SerializableCallback() {
private static final long serialVersionUID = -4852385037064234702L;
@Override
public void handleMessage(Message msg) {
callbackMethod();
}
};
FileOutputStream fos = new FileOutputStream(FILE);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(c); // fails
out.close();
FileInputStream fis = new FileInputStream(FILE);
ObjectInputStream in = new ObjectInputStream(fis);
Object object = in.readObject();
@SuppressWarnings("unused")
SerializableCallback d = (SerializableCallback) object;
}
private void callbackMethod() {}
测试在注释指示的行上给出了NotSerializableException.这里有几件事情肯定不会引起:
>缺少Serializable声明
>不可序列化的字段:根本没有字段
>最接近的非可序列化父类型的不可见非arg构造函数
那导致异常的原因是什么?
解决方法:
你的类没有no-arg构造函数.它有一个构造函数,它接受一个外部类的参数.如果你使testSerialization()静态,它可能会解决问题.
但我怀疑你的直接真正的问题是你的nest类有一个对外部类的引用而外部类不是Serializable.
标签:java,serialization
来源: https://codeday.me/bug/20190725/1537079.html