在 JDK 中,公开接口的废弃需要使用两种不同的机制,也就是“Deprecated” 注解(annotation)和“Deprecated”文档标记(JavaDoc tag)。
Deprecated 的注解会编译到类文件里,并且可以在运行时查验。这就允许像 javac 这样的工具检测和标记已废弃接口的使用情况了。
Deprecated 文档标记用于描述废弃接口的文档中。除了标记接口的废弃状态之外,一般情况下,我们还要描述废弃的原因和替代的方案。
在 JDK 9 的接口废弃机制里有了重大的改进。
第一个改进是添加了一个新的工具,jdeprscan。有了这个工具,就可以扫描编译好的 Java 类或者包,看看有没有使用废弃的接口了。即使代码使用了 SuppressWarnings 注解,jdeprscan 的结果也不受影响。这个工具解决了我们在阅读案例里提到的第一个问题。
第二个改进是给 Deprecated 注解增加了一个“forRemoval”的属性。如果这个属性设置为“true",那就表示这个废弃接口的删除已经提上日程了。两到三个版本之后,这个废弃的接口就会被删除。这样的改进,强调了代码迁移的紧急性,它给了使用者一个明确的提示。
第三个改进是给 Deprecated 注解增加了一个“since”的属性。这个属性会说明这个接口是在哪一个版本废弃的。如果我们发现一个接口已经废弃了三年以上,就要考虑尽最大努力进行代码迁移了。这样的改进,给了废弃接口的使用者一个时间上的概念,也方便开发者安排代码迁移的时间表。
有了 JDK 9 的废弃改进,我们就能够看到接口废弃的一般过程了。
第一步,废弃一个接口,标明废弃的版本号,并且描述替代方案;
第二步,添加“forRemoval”属性,把删除的计划提上日程;
第三步,删除废弃的接口。
此文章为9月Day18学习笔记,内容来源于极客时间《深入剖析 Java 新特性》