これが私の小さなクラスです:
import java.io.Serializable;
public abstract class SerializableCallback extends Callback
implements Serializable {
private static final long serialVersionUID = 4544768712188843966L;
public abstract void handleMessage(Message msg);
}
これがさらに小さな親Callback
です:
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
、コメントで示された行にが表示されます。これが確かに引き起こされないいくつかの事柄です:
- シリアル化可能な宣言がありません
- シリアル化できないフィールド:フィールドはまったくありません
- 最も近いシリアライズ不可能な親型の非表示の非引数コンストラクター
では、何が例外を引き起こしますか?