不重载属性时的Java可序列化警告

时间:2011-09-07 19:17:05

标签: java interface serializable

java编译器如何警告您不要声明serialVersionUID uid字段?有没有办法可以为自定义界面做到这一点,还是那种java语言魔术?

编辑:

我的问题不在于可序列化界面,我明白这一点。但它是如何产生警告的呢?我想实现相同的事情(警告如果实现我的接口的类不提供某个属性)但我没有看到任何关于序列化的事情。

3 个答案:

答案 0 :(得分:2)

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

另请参阅:Use the serialVersionUID or suppress warnings?

答案 1 :(得分:1)

我不太确定你的要求。它是Serializable接口的一个特性,我认为结合Eclipse的代码样式选项(或您正在使用的任何IDE),会产生此警告。如果你检查代码样式选项(通常会给你一些警告你打开,所以IDE可以帮助你保持你的代码干净),我想你会找到产生这个警告的选项。

如果您想知道警告的目的是serialVersionUID用于唯一标识序列化对象。当您的代码尝试反序列化该对象(例如,从文件中)时,如果您正在使用Java中的标准序列化技术,那么当您尝试的类的serialVerionUID时,JVM将抛出错误反序列化,不匹配编译类文件中的那个。它是JVM加载包含给定对象/数据结构的先前/替代版本的序列化对象的一种方式。

答案 2 :(得分:1)

正如其他答案所说,您正在寻找的警告高度针对Serializable

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

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