没有字段的抽象类上的NotSerializableException

Ari*_*ild 3 java serialization

这是我的小班:

import java.io.Serializable;
public abstract class SerializableCallback extends Callback
implements Serializable {
    private static final long serialVersionUID = 4544768712188843966L;
    public abstract void handleMessage(Message msg);
}
Run Code Online (Sandbox Code Playgroud)

这是它更加苗条的父母Callback:

public abstract class Callback {
    public abstract void handleMessage(Message msg);
}
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

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() {}
Run Code Online (Sandbox Code Playgroud)

测试给我NotSerializableException一个评论所指示的线.这里有几件事情肯定不会引起:

  1. 缺少Serializable声明
  2. 不可序列化的字段:根本没有字段
  3. 最接近的非可序列化父类型的不可见非arg构造函数

那么什么引起异常?

Pet*_*rey 6

你的类没有no-arg构造函数.它有一个构造函数,它接受一个this外部类的参数.如果您进行了testSerialization(),static它可能会解决问题.

但我怀疑你的直接真正的问题是你的nest类有一个对外部类的引用而外部类不是Serializable.