为什么Constructors对象不能用Java序列化?

时间:2011-08-08 13:42:11

标签: java serialization reflection

我有一个实现Serializable的类,它是一个更大的对象网格的一部分,它包含一个Constructor字段,但当它被构造函数转为序列化时,它会抛出{{1} }。

我想我自己必须自己编写逻辑并在每次反序包含对象时重新创建构造函数,但为什么Java的设计者想要在一开始就创建这样的麻烦呢?我意识到ClassLoader需要弄清楚一个类的身份,并且ClassLoader本身不会被序列化和反序列化,但是构造函数不应该记住用于创建它的字符串参数吗?

1 个答案:

答案 0 :(得分:3)

是的,因为您意识到Constructor不可序列化。

您需要使Constructor字段瞬态并在需要时手动恢复。

是的,Java设计者可以Constructor类序列化为类名和参数列表,但这会打开一个巨大的罐蠕虫,基本上归结为这样一个事实:在任何给定的JVM中,可以有任意数量的具有该名称的类,并且没有合理的方法来知道在反序列化这样的对象时使用哪一个。