我有一个实现Serializable
的类,它是一个更大的对象网格的一部分,它包含一个Constructor
字段,但是当它的构造函数被序列化时,它抛出NotSerializableException
。
我想我必须自己编写逻辑,并在每次反序列化包含对象时自己重新创建构造函数,但是为什么Java的设计者首先要创建这样的麻烦呢?我意识到需要ClassLoader来找出类的标识,并且ClassLoader本身不会被序列化和反序列化,但是构造函数不应该记住用于创建它的字符串参数吗?
是的,因为您意识到Constructor
是不可序列化的。
您需要使Constructor
字段暂态,并在需要时手动恢复它。
是的,Java设计者可以将Constructor
类序列化为类名和参数列表,但这会打开一个巨大的漏洞,基本上归结为这样一个事实:在任何给定的JVM中,可以有任意数量的具有该名称的类,并且在反序列化这样的对象时没有相同的方法知道使用哪个。