@deprecated 注解从 java 9 起新增 since 和 forremoval 属性:since(字符串)标明废弃起始版本,forremoval(布尔,默认 false)为 true 表示该 api 将在后续版本中移除,需配合 javadoc 说明替代方案。

@Deprecated 是 Java 提供的内置注解,用于标记类、方法、字段等已废弃(不推荐使用)的 API。从 Java 9 开始,它增加了两个关键属性:forRemoval 和 since,让废弃声明更明确、更具可维护性。
forRemoval:明确是否计划移除
该属性是布尔类型,默认为 false。设为 true 表示该 API **已被标记为将在未来版本中彻底删除**(如 JDK 下一主要版本),提醒调用方尽快迁移。
常见用法:
- 当 API 已有替代方案且稳定性足够时,设
forRemoval = true - 设为
true后,编译器会给出更强警告(部分 IDE 或构建工具可能额外提示) - 不建议随意设为
true,需确保已有兼容替代,并经过充分验证
since:说明废弃起始版本
since 是字符串类型,用于声明该 API **从哪个版本开始被标记为废弃**,例如 "17" 或 "21.0.1"。它不参与编译检查,但对文档和维护非常关键。
使用建议:
- 值应与项目或 JDK 的版本号规范一致,如
"11"、"17"、"21" - 避免写模糊描述(如
"next release"),也不要用日期 - 配合 Javadoc 的
@deprecated标签一起写,说明原因和替代方案
完整示例与最佳实践
正确写法如下:
@Deprecated(since = "17", forRemoval = true)
public class OldUtils {
@Deprecated(since = "17", forRemoval = true)
public static void doLegacy() {
// 已废弃,将被移除
}
}
同时在 Javadoc 中补充说明:
/**
* @deprecated Use {@link NewUtils#doModern()} instead.
* This method will be removed in JDK 21.
*/
@Deprecated(since = "17", forRemoval = true)
public static void doLegacy() { ... }
注意点:
- 仅加
@Deprecated注解不够,必须配合清晰的 Javadoc 说明 -
forRemoval = true不等于“立刻删除”,而是发出明确移除信号 - 构建工具(如 Maven + maven-compiler-plugin)可配置
-Xlint:deprecation检查未处理的废弃调用
与编译器和工具链的联动
Java 编译器(javac)本身不会因 forRemoval 改变行为,但现代开发环境会利用它:
- IDE(IntelliJ、Eclipse)对
forRemoval = true的元素显示更醒目的警告图标 - 静态分析工具(如 ErrorProne)可配置规则,禁止新代码调用
forRemoval = true的 API - CI 流程中可通过插件扫描并阻断对高危废弃 API 的新增引用
不复杂但容易忽略。合理使用这两个属性,能让废弃过程更透明、更可控。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











