2011-03-30 47 views
4

的GWT教程说GWT实现Serializable接口 - 专用的默认构造函数

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

所以,当默认构造函数仅用于序列化机制,不会是使它private有用吗?这样,类的客户端不会意外地调用默认构造函数,并且可见接口变得更小。

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

回答

-2

**警告这个答案不是如何GWT编译器处理其所需的默认无参构造**
如果你把它的私人化,系列化将无法正常工作。

从的Javadoc: “的子类型可以承担这个责任只有当它扩展的类有一个可访问的无参数的构造函数初始化类的状态这是声明一个类序列化的一个错误,如果这不是。这个错误会在运行时被检测到。“

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

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

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

+1

奇怪的是,序列化可以找到一个私有'serialVersionUID',但不是一个私有构造函数。 – 2011-03-31 00:18:03

+2

我很确定这只是故事的一半。问题是关于GWT序列化,这与正常的java序列化不同。你链接到java.io.Serializable,但是没有解决GWT特定的问题。 – 2011-12-15 16:16:41

+1

答案不相关。该引用/链接适用于最近的不可序列化的基类,而不适用于Serializable类本身。 OP的报价清楚地表明,任何访问修饰符都可以在GWT中使用。 – EJP 2011-12-15 20:54:45

0

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

因此,向可序列化类添加私有构造函数在返回(反序列化)时不起作用,因为您不能同时使用私有和公有构造函数(在GWT中,默认情况下 - 没有参数 - 一个)坚持使用公共修饰符。

干杯!

+1

GWT教程不同意你的看法。它说'与任何访问修饰符'。 – EJP 2014-03-04 00:41:23

6

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