2011-09-07 46 views
1

java编译器如何警告您未声明serialVersionUID uid字段?有没有一种方法可以为定制界面做到这一点,或者是Java语言的魔力?未超载时发生Java可序列化警告属性

编辑:

我的问题是没有这么多的Serializable接口,我理解这一点。但它是如何产生警告的?我想实现同样的事情(警告如果实现我的接口的类不提供某个属性),但我没有看到关于如何序列化的任何事情。

回答

2

它不会警告你,它只会为你默默生成serialVersionUID。但是,大多数IDE会在没有此字段的情况下触发Serializable类的警告(出于某种原因)。

参见:Use the serialVersionUID or suppress warnings?

1

我不太清楚你的要价。这是Serializable接口的一个特性,我认为它与Eclipse的代码样式选项(或者你使用的任何IDE)结合在一起,产生了这个警告。如果您在代码样式选项下进行选择(通常会给您一些警告,因此IDE可以帮助您保持代码清洁),但我认为您会找到生成此警告的选项。

如果您想知道,警告的目的是使用serialVersionUID来唯一标识序列化对象。当你的代码试图对这个对象进行反序列化时(比如说,从一个文件中),如果你在Java中使用标准的序列化技术,当你试图去串行化的类的serialVerionUID时,JVM会引发一个错误,与编辑的类文件中的不匹配。它是JVM加载包含给定对象/数据结构的先前/替代版本的序列化对象的一种方式。

1

正如其他答案说,您正在寻找的警告是非常具体的Serializable

通常,接口不能指定实现它的类中应存在哪些字段。这实际上是基本的OO设计 - 一个领域是实现,而不是接口。

为了您的需要,也许最好在界面中有一个方法,getTheField()。然后需要实现该接口的类来实现该方法。他们可能会或可能不会通过使用专用字段来存储数据,但这似乎是一个内部实现细节,这对调用者来说应该不重要。