当前位置:  开发笔记 > 编程语言 > 正文

标记为"已弃用"的API方法何时会消失?

如何解决《标记为"已弃用"的API方法何时会消失?》经验,为你挑选了4个好方法。

我正在代码审查我的一个同事刚刚做的更改,并且他添加了一堆调用Date.toMonth(),Date.toYear()以及其他已弃用的Date方法.所有这些方法都在JDK 1.1中被弃用了,但他坚持认为可以使用它们因为它们还没有消失(我们使用的是JDK 1.5)而且我说它们现在可能会在任何一天消失而且他应该使用它们Calendar方法.

Sun/Oracle实际上是在说这些事情何时消失,还是@deprecated仅仅意味着你失去了风格点?



1> VonC..:

关于API,......未指定它们将很快被删除.

J2SE 5.0中的不兼容性(从1.4.2开始):

源兼容性

[...]
一般而言,该政策如下,但下列进一步列出的任何不兼容性除外:

不推荐使用的API是仅支持向后兼容性的接口.除非使用-nowarn命令行选项,否则只要使用其中一个,javac编译器就会生成警告消息.建议修改程序以消除使用已弃用的API,尽管目前没有计划删除此类API(JVMDI和JVMPI除外) - 完全来自系统.

即使在其如何以及何时废弃API中,关于实际删除已删除的API 的策略也没有任何说明......


10年后更新,新的JDK9 + Enhanced Deprecation澄清了折旧政策.
有关详细信息,请参阅 Jens Bannmann的答案.
这也是详见本博客文章Vojtěch鲁齐卡,继上JEP 277的批评.

JDK的约定是,一旦JDK API被标记为forRemoval=true某个Java版本,它将在以下主要Java版本中被删除.
这意味着 - 当forRemoval=true在Java 9中标记某些内容时,它应该在Java 10中被完全删除.
在使用标记为删除的API时请记住这一点.

请注意,此约定仅适用于JDK本身,第三方库可以自由选择他们认为合适的任何约定.


即使它们不太可能被删除,但重要的是要注意它们为何被弃用.通常是因为在某些情况下方法或类的行为不如预期.这意味着通过使用已弃用的方法或类,您可能会在代码中引入错误.

2> Alex Miller..:

他们不会离开.也就是说,它们通常被弃用,因为a)它们是危险的线程.stop(),或b)有更好的或至少更可接受的方式来做它.通常不推荐使用的方法javadoc会给你一个更好的方法提示.在您的情况下,建议使用日历来执行此操作.

虽然可以想象他们将来会在某些时候被删除,但我不会赌它.如果有人曾经问过Java,他们可能是第一件事......



3> Eric Burke..:

一个问题是你会看到许多关于使用弃用方法的编译器警告.如果您还使用弃用逐步淘汰自己的代码,编译器警告将在噪声中丢失并失去意义.



4> Jens Bannman..:
tl; dr

从JDK 10开始,所有原始java.util.Date方法仍然存在,但是现在可以将这些API和其他API 明确标记为要删除。其他API最近已被删除。

完整答案

在Java 9之前,没有删除JDK中已弃用的API(请参阅Java弃用20年)。

但是,作为称为“ Enhanced Deprecation”功能的一部分,JDK 9引入了该@Deprecated(forRemoval=true)标志并将其添加到数十个先前不推荐使用的API中。java.util.Date但是,方法并不在其中。

同样,这是该语言历史上的第一次,JDK 9 删除了以前不推荐使用的API(如Java SE 9 Specification中所述)。这些是模块化的障碍,在JDK 8中已弃用。

JDK 10 将更多以前不推荐使用的API标记为要删除。再一次地,java.util.Date方法得以保留。

JDK 10还删除SecurityManagerRuntime类中的一些不赞成删除的API (如Java SE 10 Specification中所述)。

因此,要点是:

    不推荐使用的删除API很可能会很快删除。请认真对待。虽然可能无法在forRemoval标记后的发行版中将其删除(例如,Thread.stop()在JDK 9中标记,但仍在JDK 10中),但它可能很快发生。

    没有一个不推荐使用的API是安全的,因为即使很长一段时间不推荐使用的API现在也可以很快删除:一个JDK版本设置了该forRemoval标志,下一个则删除了该API。例如,被JDK 10删除的API已被弃用至少20年(自JDK 1.2起),以至于有些人现在可能会感到惊讶。

    随着Oracle 六个月的新发布周期的发展,JDK的发布以及扩展(即,过时和删除)现在的发生速度要快得多。

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有