标记为“已弃用”的 API 方法何时会消失?
我正在对我的一位同事刚刚所做的更改进行代码审查,他添加了一堆对 的调用和其他已弃用的方法。所有这些方法在JDK 1.1中被弃用,但他坚持认为使用它们是可以的,因为它们还没有消失(我们正在使用JDK 1.5),我说它们现在可能随时消失,他应该使用方法。Date.toMonth()
Date.toYear()
Date
Calendar
Sun/Oracle是否真的说过这些东西什么时候消失了,或者只是意味着你失去了风格点?@deprecated
我正在对我的一位同事刚刚所做的更改进行代码审查,他添加了一堆对 的调用和其他已弃用的方法。所有这些方法在JDK 1.1中被弃用,但他坚持认为使用它们是可以的,因为它们还没有消失(我们正在使用JDK 1.5),我说它们现在可能随时消失,他应该使用方法。Date.toMonth()
Date.toYear()
Date
Calendar
Sun/Oracle是否真的说过这些东西什么时候消失了,或者只是意味着你失去了风格点?@deprecated
关于 API,...没有指定它们将很快被删除。
源兼容性
[...]
一般而言,除下面列出的任何不兼容性外,该政策如下:已弃用的 API 是仅支持向后兼容的接口。每当使用其中一个时,javac 编译器都会生成一条警告消息,除非使用 -nowarn 命令行选项。建议修改程序以消除已弃用的 API 的使用,尽管目前没有计划从系统中完全删除此类 API(JVMDI 和 JVMPI 除外)。
即使在如何以及何时弃用API中,也没有关于实际删除已弃用API的策略的任何说明...
10 年后的更新中,新的 JDK9+ 增强型弃用明确了折旧策略。
请参阅Jens Bannmann的答案以获取更多详细信息。
Vojtěch Růžička在对JEP 277的批评之后的这篇博客文章中也详细介绍了这一点。
JDK的惯例是,一旦JDK API被标记为在某个Java版本中,它将在紧随其后的主要Java版本中被删除。
这意味着 - 当某些东西被标记为Java 9中时,它应该在Java 10中完全删除。
使用标记为删除的 API 时,请记住这一点。forRemoval=true
forRemoval=true
请注意,此约定仅适用于 JDK 本身,第三方库可以自由选择他们认为合适的任何约定。
他们不会消失。也就是说,它们通常被弃用,因为a)它们是危险的ala Thread.stop(),或者b)有一种更好或至少更被接受的方法可以做到这一点。通常不推荐使用的方法javadoc会给你一个关于更好方法的提示。就您而言,建议使用“日历”来执行此操作。
虽然可以想象它们将在未来的某个时候被删除,但我不会打赌。然而,如果有人分叉Java,他们可能会是第一个要去的地方......