Java API方法何时标记为;不赞成;真的要走了?
我正在对我的一位同事刚刚做的一项更改进行代码审查,他向Java API方法何时标记为;不赞成;真的要走了?,java,date,Java,Date,我正在对我的一位同事刚刚做的一项更改进行代码审查,他向Date.toMonth()、Date.toYear()和其他不推荐的Date方法添加了一系列调用。所有这些方法在JDK1.1中都被弃用了,但他坚持认为使用它们是可以的,因为它们还没有消失(我们使用的是JDK1.5),我说它们现在随时都可能消失,他应该使用Calendar方法 Sun/Oracle是否真的说过这些东西什么时候会消失,还是说@deprecated只是意味着你失去了风格点?他们不会消失。也就是说,它们通常被弃用,因为a)它们是危险
Date.toMonth()
、Date.toYear()
和其他不推荐的Date
方法添加了一系列调用。所有这些方法在JDK1.1中都被弃用了,但他坚持认为使用它们是可以的,因为它们还没有消失(我们使用的是JDK1.5),我说它们现在随时都可能消失,他应该使用Calendar
方法
Sun/Oracle是否真的说过这些东西什么时候会消失,还是说
@deprecated
只是意味着你失去了风格点?他们不会消失。也就是说,它们通常被弃用,因为a)它们是危险的线程.stop(),或者b)有更好的或至少更被接受的方法。通常不推荐使用的javadoc方法会提示您更好的方法。在您的情况下,建议使用日历进行此操作
虽然可以想象它们在未来的某个时候会被移除,但我不会打赌。但是,如果有人使用Java,他们可能会是第一个使用Java的人 如果不推荐的方法消失了,它们可能会破坏现有的代码 虽然维护一个干净的API很重要,但不推荐的方法不会妨碍任何人。当然,现在有更好的方法做事情,所以新方法取代旧方法。但是,摆脱旧的API不会有任何好处(除了更干净的API)
把“弃用”看作是“过时”的意思,但不一定是“在砧板上” “还没走”和“永远不会走”是两件截然不同的事情。这就是反对的重点。它们可以随将来的任何版本而消失。使用它们是一个风险自负的提议。请注意,JDK的某些未来版本可能会使您的代码处于不可用状态。不推荐的功能已被取代,应避免使用。尽管它们仍然存在于JDK中,但由于有更好的方法可用,因此不鼓励使用它们。这些方法留在API中以支持向后兼容性,但通常应避免使用,因为它们可以在API的未来版本中删除
从技术上来说,使用不推荐使用的方法是可以的,但通常情况下,最初不推荐使用的原因是已经开发出了更好/更快/更干净的API。Sun在遇到影响向后兼容性的更改时往往会非常偏执,因此我不希望看到这些方法很快消失 但是不推荐的方法可能会在将来的任何时候消失,并且通常会因为某种原因而被弃用——要么是因为它们不可靠,要么是因为它们有令人不快的副作用,要么只是因为有更好或更优雅的做事方式。该方法的JavaDoc通常会详细说明以下哪种情况,以及目前执行相同操作的可接受方式。通常情况下,不推荐使用的方法会被一个调用“正确”方法的实现所取代,因此您只是添加了一个间接级别
如果您使用这些方法,您还将收到大量编译警告,这可能是避免它们本身的充分理由…关于API。。。没有明确规定他们将很快被移除 : 源兼容性 […]
一般而言,政策如下所示,但下文进一步列出的任何不兼容情况除外: 不推荐使用的API是仅支持向后兼容性的接口。除非使用了-nowarn命令行选项,否则每当使用其中一个命令行选项时,javac编译器都会生成一条警告消息。建议修改程序,以消除不推荐使用的API,尽管目前没有计划完全从系统中删除此类API,JVMDI和JVMPI除外 即使在its中,也没有提到关于实际删除被否决的API的策略
10年后更新,新版本澄清了折旧政策。
有关详细信息,请参阅。
这篇博文中也有详细介绍,作者如下 JDK的惯例是,一旦JDK API在某个Java版本中被标记为
forremove=true
,它将在随后的主要Java版本中被删除
这意味着-在Java9中,当某个东西被标记为forremove=true
时,它应该在Java10中被完全删除。使用标记为删除的API时,请记住这一点。 请注意,此约定仅适用于JDK本身,第三方库可以自由选择他们认为合适的任何约定
我肯定看到过弃用函数的消失——从Java的旧版本到当前版本(我从1.1开始,有些东西在1.4中显然不起作用)
其他语言处理不推荐使用的方式不同——例如,Python在过去就已经知道,在一两个版本之后就可以删除不推荐使用的功能。一个问题是,您会看到许多关于使用不推荐使用的方法的编译器警告。如果您还使用弃用来逐步淘汰自己的代码,编译器警告将消失在噪音中,失去意义。我有一个更好的建议:与其告诉他使用日历,不如改用or的预发布版本。
java.util.Date
上的一些方法可能会被弃用,但在我看来,整个类应该与Calendar
一起弃用。JSR-310的开发人员似乎同意,尽管我怀疑他们是否会咬紧牙关反对它
没有特别的顺序,下面是日期的错误:
- 它的内部表示是从纪元开始的毫秒;因此,坎