您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

标记为“已弃用”的API方法何时真正消失?

标记为“已弃用”的API方法何时真正消失?

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

J2SE 5.0中的不兼容(自1.4.2开始)

源兼容性

[…] 通常,该政策如下,但以下列出的不兼容之处除外:

不推荐使用的API是仅支持向后兼容的接口。除非使用- Nowarn命令行选项,否则只要使用其中之一,javac编译器就会生成一条警告消息。建议修改程序,以消除对过时的API的使用, 从系统中完全 (JVMDI和JVMPI除外)。

即使在其“如何以及何时弃用API”中,也没有任何关于实际删除 不赞成使用的API 的政策…

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

JDK的约定是,一旦将JDK API标记forRemoval=true某个Java版本中的JDK API , 。 这意味着-当某些东西forRemoval=true在Java 9中标记为时,应该在Java 10中将其完全删除

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

tl; dr 从JDK 13开始,所有原始java.util.Date方法仍然存在,但是现在可以将这些API和其他API 明确标记为要删除。最近已删除了许多其他不推荐使用的API。

完整答案 在JDK 9之前,从未删除过JDK中不推荐使用的API。该发行版是称为“ 增强的弃用”功能的一部分,引入了该@Deprecated(forRemoval=true)标志并将其添加到数十个先前弃用的API中。

同样,在该语言的历史上,JDK 9首次删除了由于模块化的障碍而被JDK 8弃用的API(Java SE 9规范的完整列表)。

从那时起,每个JDK版本都删除了其他以前标记为要删除的API。大多数版本还forRemoval向以前不建议使用的API 添加了标志,或者添加了全新的删除要求:

删除SecurityManager和Runtime类(完整列表)中的一些API 。 forRemoval:其他先前不推荐使用的API,例如整个java.security.acl程序包和finalize()某些I / O类的方法(完整列表)。 删除Thread.destroy()Thread.stop()其他一些方法和Policy类(名单),所有这些已被JDK 9或10提出了去除-分别只有12个和6个月前。 forRemoval:java.util.jar.Pack200API(完整列表)。 仅在12个月前在JDK 10中宣布删除finalize()某些I / O类的方法(完整列表)。 forRemoval: 没有 去除Runtime.traceInstructions()Runtime.traceMethodCalls(),标志着在JDK

9两年前(去除完整列表)。 forRemoval:javax.security.cert包装和其他一些方法。最值得注意的是,完整列表包括java.lang.String此版本中仅添加的几种方法,但是由于它们与“文本块”预览功能有关,可能会再次消失。

不推荐使用的删除API很可能会很快删除。请认真对待。尽管可能无法在forRemoval标记后将其删除(例如,Thread.stop()在JDK 9中标记,但在JDK

之前未删除),但它可能很快发生。 没有一个不推荐使用的API是安全的,因为即使很长一段时间不推荐使用的API现在也可以很快删除一个JDK版本设置了该forRemoval标志,下一个删除了该API。例如,被JDK

删除的API已被弃用至少20年(自JDK 1.2起),以至于有些人可能会感到惊讶。 如今,随着Oracle 使用JDK 10 切换到6个月的发布周期,弃用和删除发生的速度更快。

其他 2022/1/1 18:15:26 有579人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶