java 9起@deprecated支持since属性,需jdk版本≥9、maven和ide同步配置;since值为字符串如"2.5.0",应与javadoc @deprecated标签协同说明废弃原因及替代方案,并分阶段管理废弃生命周期。

@Deprecated 注解本身在 Java 中不直接支持 since 属性——这是常见误解。标准 JDK 的 @Deprecated(自 Java 5 引入)仅含 forRemoval 和 since 两个可选元素,但 since 是从 Java 9 才正式加入 的。若你使用的是 Java 9+,才能安全、规范地用 since 标明废弃起始版本。
确认 JDK 版本并启用 since 属性
Java 9 之前(如 Java 8),@Deprecated 没有 since 元素,强行写会编译报错。请先检查项目 JDK 版本:
- 执行
java -version确认为 9 或更高版本 - Maven 项目需在
pom.xml中声明<source>9</source>或更高 - IDE(如 IntelliJ / Eclipse)需同步配置为对应 JDK,否则提示“cannot resolve symbol since”
正确写法:since 必须是字符串字面量
since 接收 String 类型值,通常填语义化版本号(非数字),例如 "1.2.0"、"2023.1" 或 "v3.4"。它不参与编译校验,纯属文档提示:
@Deprecated(since = "2.5.0", forRemoval = true)
public class LegacyService { ... }
-
since = "2.5.0"表示该类从 2.5.0 版本起被标记为废弃 -
forRemoval = true表示计划在未来版本中彻底移除(推荐配合since使用) - 不要写
since = 2.5(类型错误)或since = "2.5"(虽合法但建议补零统一格式)
与 Javadoc @deprecated 标签协同使用
@Deprecated 注解和 Javadoc 中的 @deprecated 标签应互补,而非重复:
- 注解用于编译器识别(触发警告、IDE 提示、静态分析)
- Javadoc
@deprecated标签用于说明为什么废弃、替代方案是什么、何时移除 - 示例:
/** * @deprecated Use {@link ModernService} instead. * This implementation will be removed in v4.0. */ @Deprecated(since = "3.2.0", forRemoval = true) public class LegacyService { ... }
在组件演进中分阶段管理废弃生命周期
借助 since 可清晰表达版本节奏,建议按三阶段推进:
-
标记废弃:在 v3.2.0 发布时添加
@Deprecated(since = "3.2.0"),同时更新文档和迁移指南 -
强化提示:v3.5.0 起设
forRemoval = true,让 IDE 显示更醒目的删除警告 - 最终移除:v4.0.0 发布时彻底删除该组件,并在变更日志中注明 “Removed: deprecated since 3.2.0”
这种做法让团队成员和下游用户能直观追溯废弃起点,降低误用风险。










