java 停止算法的调用_一个不只是简单地“停止调用” Java弃用的方法

他们不赞成敲定。

这是一个非常剧烈的举动。 Finalize在Java类层次结构顶部的Object类中在那里定义,比公共变量公开得多。 但是finalize方法的语义与JVM臭名昭著的垃圾收集器有关 二十年前没有人设计API时,会想到在声明finalize方法二十年后,垃圾收集器的垃圾收集模式仍然是完全不可预测的。 如果他们这样做了,他们将永远不会一开始就对它进行编码。

finalize方法必须消失,因为在JVM的gc系统上进行存储并随后将功能绑定到POJO的失败是基于字节码的恶意。 因此,在不久的将来的版本中,将在finalized方法上放置一个@deprecated注释。 那到底是什么意思呢? 在Java世界中,它的意义很小。

java 停止算法的调用_一个不只是简单地“停止调用” Java弃用的方法

一个不只是停止调用不推荐使用的Java方法

隐藏Java方法弃用问题

Java中有许多不赞成使用的方法,没有什么可以阻止您调用它们。 当然,在Eclipse或NetBeans IDE的行号栏中可能会出现黄色的屈服符号,警告您正在调用Java弃用的方法之一,仅此而已。 解决此问题的一种简单方法是进入IDE的首选项窗口,并告诉它不要报告对不赞成使用的方法的调用。 只需执行快速更改,然后进行重新构建,所有已弃用的方法警告都将消失。

另一种方法是用@SuppressWarnings(“ deprecation”)批注装饰您编写的代码。 这是使您的弃用问题消失的另一种简单方法。

Java方法弃用问题已解决

对于那些在编译器级别管理Jenkins构建的人员 ,可以使用编译器上的-Xlint:all开关阻止您在Gradle或Maven构建期间看到有关不赞成使用的方法调用的警告。 确实,有许多方法可以处理过时的方法。 这些只是更常见的一些。

当然,有些人可能会认为正确的方法是停止调用不推荐使用的方法。 十年或十五年前,这样做可能有一定的动力,当弃用警告使开发人员感到时钟在滴答作响,而计时器用完时,他们的代码将不再起作用。 如果从Java SE API套件中删除了不赞成使用的方法,那将是正确的,但是从来没有。

我仍然看到用户调用不推荐使用的java.util.Date()构造函数。 我参与的最后一个项目充满了对不赞成使用的URLEncoder.encode()的调用。 当然,人们不应该调用Java的不赞成使用的方法,但是考虑到它们可以工作,加上不赞成使用15到20年后,它们仍在API中徘徊,因此开发人员会继续使用它们。 仅仅告诉开发人员“接受该程序”显然是不够的。

Java方法弃用和向后兼容

那么,为什么他们继续在规范中保留所有这些不推荐使用的方法呢? 曾经有人告诉我,修剪通常是在完整增量版本上进行的,并且由于Java从未过渡到2.0版,因此从来没有必要这样做。 (尽管Java拥有版本7和版本8,但是实际的版本增量是1.7和1.8。) 为了向后兼容,需要说些什么 不从规范中删除不推荐使用的方法,会使旧代码与将来的编译器向前兼容,这当然会使维护旧代码更加容易。

但是,Java永远不会修剪超出规范的方法并不是一种普遍的方法。 相反,Spring一直积极地将不受欢迎的功能从代码库中删除。 “似乎Java不赞成使用弃用,而我们不赞成使用的观点是,如果不赞成使用某些东西,则可以在下一个主要版本中删除它,” Rod Johnson数年前在讨论Spring框架时说道。弃用实际上是在说些什么。 它说:“这种情况可能会在18个月的时间内消失。””

事实是,无论归咎于JVM的gc进程 ,finalize方法都从未按照人们期望的方式完成应有的工作。 这本身就是足够的理由将其投离该岛,因此@deprecated标志无疑是必要的。 但是,不要仅仅弃用它。 抓住篱笆剪,并制定计划将其剪下并扔进垃圾桶。 当然,这确实是问题,不是吗? Java从来没有可预测的垃圾收集服务。

您可以在Twitter上关注Cameron McKenzie: @cameronmckenzie

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/One-does-not-simply-stop-calling-Javas-deprecated-methods