Java 具有可序列化的默认行为的函数接口
当没有默认方法的接口扩展了可序列化的everythings时,一切正常。 但当该接口的默认方法出现在图片中时,我们会收到一条警告,警告如下: MyInterface.java:可序列化类MyInterface没有定义 serialVersionUID的定义 当我将接口更改为抽象类时,它变得很有趣。错误消失了 警告发生表总结如下:Java 具有可序列化的默认行为的函数接口,java,interface,compiler-warnings,serializable,default-method,Java,Interface,Compiler Warnings,Serializable,Default Method,当没有默认方法的接口扩展了可序列化的everythings时,一切正常。 但当该接口的默认方法出现在图片中时,我们会收到一条警告,警告如下: MyInterface.java:可序列化类MyInterface没有定义 serialVersionUID的定义 当我将接口更改为抽象类时,它变得很有趣。错误消失了 警告发生表总结如下: |----------------------------|------------------| | Type |
|----------------------------|------------------|
| Type | WARNING |
|----------------------------|------------------|
| interface with no defaults | NO |
|----------------------------|------------------|
| interface with defaults | YES |
|----------------------------|------------------|
| abstract class | NO |
|----------------------------|------------------|
这有什么原因吗?或者这只是一个bug?只有在使用
javac-Xlint
时才会发生这种情况。和-X选项是特定于Oracle的,不是任何Java规范的一部分。此警告出现在1.8u152和9.0.1上。当我尝试时,没有此类问题Eclipse@DodgyCodeException对我使用的是OracleJDK,我使用的是-Xlint。这仍然是一个奇怪的行为。谢谢你在这个问题上提出错误。它现在被追踪为。接口上缺少serialVersionUID警告确实是一个bug。由于接口从未序列化,因此它拥有serialVersionUID是毫无意义的。但是,您可以说抽象类不会生成缺少的svuid警告。对我来说确实如此,而且应该如此。在什么情况下javac不会对抽象类发出警告?啊。JDK 7不会对缺少serialVersionUID的可序列化抽象类发出警告。看见这是固定的,但是javac仍然会在不应该发出警告的时候发出警告,并且可能不会在应该发出警告的时候发出警告。我们会把它们修好的。