JDK可能正在使用JDK 11 : @Serial
获得另一个标准(预定义)注释 。 JDK-8202385 [“标记与序列相关的字段和方法的注释”]的目的是添加“某种“ SerialRelated”注释,以促进对序列字段和方法的声明的自动检查。” 这种想法是为了更好地向开发人员指示与序列化相关的字段或方法的拼写错误,类似于“使用java.lang.Override批注类型来指示编译器应验证该方法实际上被覆盖”的方式。
Joe Darcy 最近要求对“ webrev ”(建议的代码添加) 进行审查 。 这提供了新@Serial
外观。 当前的建议是将此注释定义驻留在java.io包中 ,以特定的方法或字段为目标 ,并具有SOURCE 保留 。
对于@Serial的建议定义, Javadoc注释当前提供了有关如何使用此注释的重要详细信息。 此Javadoc还明确指定了预期使用@Serial
进行注释的方法和字段: writeObject() , readObject() , readObjectNoData() , writeReplace() , readResolve() , ObjectStreamField []和serialVersionUID 。
建议的@Serial
批注将在执行javac “ serial
” lint检查时进行检查。 在Darcy的电子邮件审核请求中对此进行了描述:
拟议的java.io.Serial
批注类型旨在与javac的“串行” lint检查的增强实现一起使用。 该工作将作为JDK-8202056的一部分单独完成:“扩展串行警告以检查与串行相关的方法的严重过载”。
有趣的是,该注解的名称不一定要最终确定,尽管它似乎很可能会保留下来。 达西的电子邮件指出,还可以使用其他名称,例如@Serialize
和@SerialRelated
。
一个有趣的区别是, @Serial
批注不能或不应与Externalizable接口的某些方法和某些字段一起使用(扩展Serializable ),因为这些方法和字段未在Externalizable中使用 。 在这种区别的更多细节在核心库-dev的相关信息提供053060 , 053061 , 053064和053067 。
在@Serial
,尚未正式为JDK 11计划@Serial
批注,但考虑到JDK-8202385的最新进展,它似乎可以及时在JDK 11版本中使用 。 除了此批注对实现自定义序列化的潜在用途之外,此批注的定义还将提供另一个示例,说明如何记录任何自定义批注以使其正确使用。
翻译自: https://www.javacodegeeks.com/2018/05/javas-serial-annotation.html