为什么构造函数对象不能在 Java 中序列化?



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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新