我正在尝试获取一些运行时异常来验证 Serializable
接口。上面写着
要允许序列化不可序列化类的子类型,子类型可以负责保存和还原父类型的public、protected和(如果可以访问)包字段的状态。只有当子类型扩展的类具有可访问的no arg构造函数来初始化类的状态时,子类型才可以承担此责任。如果不是这样,则声明类可序列化是错误的。将在运行时检测到错误。
我已经在这里编写了一些代码来测试它,但是没有得到任何异常。
class A {
private A() {
System.out.println("private A");
}
public A(final int i) {
System.out.println("public A");
}
}
public class B extends A implements Serializable {
private static final long serialVersionUID = -2683305431271101335L;
public B(final int i) {
super(i);
System.out.println("public B");
}
public static void main(final String[] args) {
final B t = new B(10);
try {
final ObjectOutputStream oio = new ObjectOutputStream(System.out);
oio.writeObject(t);
} catch (final IOException e) {
e.printStackTrace();
}
}
}
它做得对吗?
1条答案
按热度按时间yfwxisqw1#
serialization只会在读取对象时检测到无参数构造函数的取消,这样更改代码
你会看到的
线程“main”java.io.invalidclassexception异常:test.b;没有有效的构造函数