Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java API方法何时标记为;不赞成;真的要走了?_Java_Date - Fatal编程技术网

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的开发人员似乎同意,尽管我怀疑他们是否会咬紧牙关反对它

没有特别的顺序,下面是日期的错误:

  • 它的内部表示是从纪元开始的毫秒;因此,坎