Java 9 @Deprecated 注解增强:forRemoval 与 since 属性
增强动机
@Deprecated 自 Java 5 起存在,但仅标记“不推荐使用”,未区分“将来会移除”还是“仅建议迁移”。Java 9 新增两个属性提供语义精度:
- forRemoval():
boolean,默认false。true表示计划在未来版本移除,迁移紧迫性高。 - since():
String,默认""。标记废弃起始版本(如"9"),便于工具生成迁移时间线。
注解定义
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
public @interface Deprecated {
String since() default "";
boolean forRemoval() default false;
}
标准库示例
Boolean 类:since 属性
@Deprecated(since="9")
public static Boolean valueOf(String s) { ... }
标明自 Java 9 起废弃,建议使用 Boolean.parseBoolean() 或 valueOf(boolean)。
System 类:forRemoval 属性
@Deprecated(forRemoval=true, since="9")
public static void runFinalizersOnExit(boolean value) { ... }
标明将在未来版本移除,且自 Java 9 起废弃,调用者应立即迁移。
工具链支持
javac编译时:forRemoval=true触发更强烈警告(-Xlint:removal)。jdeprscan:扫描项目中使用的废弃 API,可按--for-removal过滤高风险项。- IDE(IntelliJ IDEA、Eclipse)在编辑器中区分显示:删除线(普通废弃)vs 红色波浪线/删除线+图标(计划移除)。
- 文档生成:Javadoc 自动在废弃条目显示 “Since: 9”、“For Removal: true”。
最佳实践
- 库作者:新废弃 API 显式标注
@Deprecated(since="X", forRemoval=true/false)。 - 应用开发者:启用
-Xlint:deprecation,removal编译检查,定期运行jdeprscan。 - 优先处理
forRemoval=true的调用点,制定迁移计划。 - 配合
@since文档标签,保持源码与注解一致。
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 注解类型完全指南:预定义、自定义与元注解
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 10 垃圾收集器接口与 G1 并行 Full GC