当前位置: 首页 > 面试题库 >

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

晁文斌
2023-03-14
问题内容

我正在代码中审查一位同事所做的更改,他添加了对的调用Date.toMonth()Date.toYear()以及其他不赞成使用的Date方法。所有这些方法在JDK
1.1中均已弃用,但他坚持认为可以使用它们,因为它们还没有消失(我们正在使用JDK
1.5),我是说它们可能有一天会消失,他应该使用Calendar方法。

当这些事情消失时,Sun / Oracle是否真的说过,还是@deprecated只意味着您失去了风格点?


问题答案:


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此版本中仅添加的几种方法,但是由于它们与“文本块”预览功能有关,可能会再次消失。

Takeaways

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

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

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

 类似资料:
  • 问题内容: 我想使我的方法之一“不赞成使用” =不再使用。 但是我仍然想在我的API中使用它。我只想向使用该方法的任何人显示“警告”。 我该如何实现? 问题答案: 在方法上使用。不要忘记澄清javadoc字段:

  • 我想以某种方式将模式中的一列标记为“deprecated”(可能是列注释中的某种标记或其他标记),然后在代码生成过程中使该信息冒泡出来,从而在生成的代码中向该列的字段/方法添加一个注释。 JOOQ有任何与此相关的功能吗<浏览用户手册似乎没有显示任何相关内容。

  • 问题内容: 我只是好奇为什么不赞成使用HTML中的标记。 通过将容器封装在标签中,这是一种快速居中对齐文本和图像块的简单方法,我现在真的找不到任何更简单的方法。 任何人都知道关于如何使“东西”居中(而不是和宽度的东西)的任何简单方法吗?而且,为什么不推荐使用它? 问题答案: 该元素已弃用,因为它定义了其内容的 表示形式 —它未描述其内容。 居中的一种方法是将元素的和属性设置为,然后将父元素的属性设

  • 问题内容: 我正在使用Swift和Firebase。以前,我使用以下方法获取Firebase令牌,然后将其用于存储到数据库中以发送通知。 现在,由于我已更新Firebase,因此此方法显示为已弃用。 我不知道如何使用我尝试了以下操作,但不知道如何获取令牌。 请帮忙。先感谢您。 问题答案: 获取当前注册令牌 注册令牌是通过方法传递的。通常每个应用程序以FCM令牌开始一次调用此方法。调用此方法时,是执

  • 问题内容: 不推荐使用此调用: 在源文件中,我可以看到: 但是我不明白我必须使用哪种方法代替。 问题答案: 您可以在Hibernate 5.2 +中使用以下接口:

  • 我正在将java应用程序从SpringBoot1.5迁移到SpringBoot2.2.3,这涉及到将Hibernate/Envers升级到5.4.10。最终的 现有代码调用AuditReader#getCurrentRevision(类revisionEntityClass,boolean persist),该类已被弃用,JavaDocs状态为使用RevisionListener,但这与我们需要获