我正在代码审查我的一位同事刚刚所做的更改,他添加了一堆调用Date.toMonth()
, Date.toYear()
和其他已弃用的Date
方法。所有这些方法在 JDK 1.1 中均已弃用,但他坚持认为使用它们是可以的,因为它们还没有消失(我们正在使用 JDK 1.5),而且我说它们现在可能随时消失,他应该使用Calendar
方法。
Sun/Oracle 是否真的说过这些事情即将消失,或者确实说过@deprecated
只是意味着你失去了风格点?
关于 API,...没有指定它们会很快被删除。
J2SE 5.0 中的不兼容性(自 1.4.2 起) http://java.sun.com/j2se/1.5.0/compatibility.html:
源兼容性
[...]
一般来说,该政策如下,但下面进一步列出的任何不兼容之处除外:
已弃用的 API 是仅支持向后兼容的接口。只要使用其中之一,javac 编译器就会生成警告消息,除非使用 -nowarn 命令行选项。建议修改程序以消除使用已弃用的 API,尽管目前没有计划删除此类 API– JVMDI 和 JVMPI 除外 – 完全来自系统。
即使在其如何以及何时弃用 API http://java.sun.com/javase/6/docs/technotes/guides/javadoc/deprecation/deprecation.html,实际上没有提及任何有关政策removing已弃用的 API...
10年后更新,新的JDK9+ 增强弃用 https://docs.oracle.com/javase/9/core/enhanced-deprecation1.htm#JSCOR-GUID-23B13A9E-2727-42DC-B03A-E374B3C4CE96明确折旧政策。
See 延斯·班曼 https://stackoverflow.com/users/7641/jens-bannmann's answer https://stackoverflow.com/a/50445603/6309更多细节。
这篇博文中也详细介绍了这一点沃伊捷赫·鲁日卡 https://twitter.com/vojtechruzicka, 下列的对 JEP 277 的批评 https://blog.jooq.org/2015/12/22/jep-277-enhanced-deprecation-is-nice-but-heres-a-much-better-alternative/.
JDK 的约定是,一旦 JDK API 被标记为forRemoval=true
在某个Java版本中,它将在接下来的主要 Java 版本中删除.
这意味着 - 当某物被标记为forRemoval=true
在 Java 9 中,它应该在 Java 10 中完全删除。
使用标记为删除的 API 时请记住这一点。
请注意,此约定仅适用于 JDK 本身,第三方库可以自由选择他们认为合适的任何约定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)