为什么我会得到“无效的构造函数”异常?

时间:2012-02-12 05:23:20

标签: java

我正在序列化一个班级。我有以下结构:

class A { class B { public B(); ... } }
class C extends A { class D extends A.B implements Serializable { public D(); } }

我可以编写C.D类型的对象,但每当我尝试读回它们时,我都会得到例外:

java.io.InvalidClassException: C$D; C$D; no valid constructor

任何想法?

为了说清楚,它在http://docs.oracle.com/javase/7/docs/api/java/io/InvalidClassException.html说明当没有接受任何参数的构造函数时抛出此异常。但我确实有这些构造函数。

1 个答案:

答案 0 :(得分:4)

您的问题是,A.B班需要Serializable。如果添加该界面,您可以愉快地保存和恢复对象。

当你序列化一个扩展嵌套类的类(当然是一个极端情况!)时,它需要访问父类的成员变量,否则你将拥有一个部分对象。这涉及序列化父母。

错误消息当然可以更好,是的 - 通常“无效的构造函数”只有在存在循环依赖或者(如你所说)缺少no-args构造函数的情况下才会获得。