GWT实现Serializable - Private Default-Constructor

时间:2011-03-30 09:31:21

标签: java serialization gwt

GWT教程说

As of GWT 1.5, it must have a default (zero argument) constructor (with any access modifier) or no constructor at all.

因此,当默认构造函数仅由序列化机制使用时,使其成为private是否有用?这样,类的客户端不会意外调用默认构造函数,可见界面变小。

或者它以某种方式以某种方式影响序列化机制?

3 个答案:

答案 0 :(得分:6)

GWT教程声明似乎适用于GWT本身的特定要求,否则它重申了一个常见的误解。 Java 要求是最近的非可序列化基类具有可访问的默认构造函数。不是可序列化的类本身。

答案 1 :(得分:0)

序列化的完整过程还涉及反序列化,其中将重构java对象。

因此,将一个私有构造函数添加到可序列化的类将不会在返回的路上工作(反序列化),因为您不能同时拥有具有相同参数的私有和公共构造函数(在GWT情况下,默认情况下为no args - one)坚持使用公共修饰语。

喝彩!

答案 2 :(得分:-2)

**警告此答案不是关于GWT编译器如何处理其所需的默认非ARG构造器**
如果您将其设为私有,则序列化将无效。

来自Javadoc: “只有当它扩展的类具有可访问的no-arg构造函数来初始化类的状态时,子类才可以承担此责任。如果不是,则声明类Serializable是错误的case。将在运行时检测到错误。“

是的,它会影响序列化过程。

您可以弃用或注释此构造函数,指示它仅用于序列化目的。

有关序列化的详细信息,请参阅here