在Java中使用Deprecated方法或类是错误的吗?

Ume*_*wte 152 java methods deprecated

我正在使用eclipse开发一个Web应用程序.就在今天,我通过更改JAR文件更新了我的struts版本.我正在某些地方收到警告,方法已被弃用,但代码工作正常.

我想知道一些事情

  1. 在Java中使用Deprecated方法或类是错误的吗?

  2. 如果我不更改任何方法并使用我的警告运行我的应用程序,它会产生任何性能问题.

aio*_*obe 263

1.在Java中使用Deprecated方法或类是不对的?

弃用的定义:

注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它很危险,或者因为存在更好的替代方案.

该方法保留在API中以便在未指定的时间段内向后兼容,并且可以在将来的版本中删除.也就是说,不,这没有,但有一种更好的方法,它可以更好地抵御API变化.

2.如果我不更改任何方法并使用我的警告运行我的应用程序,它会产生任何性能问题.

很可能没有.它将继续像弃用之前一样工作.API方法的合同不会改变.如果某些内部数据结构发生变化而采用新的更好的方法,则可能会对性能产生影响,但这种情况不太可能发生.


最有趣的弃用 Java API中,是海事组织,FontMetrics.getMaxDecent.弃用原因:拼写错误.

已过时.从JDK版本1.1.1开始,由getMaxDescent()取代.

  • Java API中下一个最有趣的弃用是AbstractButton(Swing)中的setMultiClickThreshhold(int threshhold)和getMultiClickTreshhold().为这两个做好准备!;) (3认同)
  • 我们需要使用HTTP REFERER执行此操作.这令人抓狂:https://en.wikipedia.org/wiki/HTTP_referer (3认同)

aby*_*byx 28

您仍然可以在不改变性能的情况下使用已弃用的代码,但是弃用方法/类的全部目的是让用户知道现在有更好的方法使用它,并且在将来的版本中,可能会删除已弃用的代码.

  • 你怎么能确定它的性能没有变化?例如,贬值*可能*是由于内部数据结构的更改,例如从 HashSet 到 TreeSet。 (2认同)

pol*_*nts 21

术语

来自官方的Sun词汇表:

deprecation:指不再推荐的类,接口,构造函数,方法或字段,可能在将来的版本中不再存在.

从何时何时弃用指南:

您可能已经听过"自我贬低的幽默"这个词,或者说可以最大限度地降低说话者重要性的幽默.不推荐使用的类或方法就是这样.它不再重要.事实上,你不应该再使用它,因为它已被取代并且将来可能不再存在,这是非常不重要的.

@Deprecated注释更进一步和危险警告:

注释的程序元素@Deprecated是程序员不鼓励使用的程序元素,通常因为它是危险的,或者因为存在更好的替代方案.

参考


对还是错?

使用弃用方法是对还是错的问题必须逐个审查.以下是有效Java第2版中出现"deprecated"一词的所有引号:

第7项:避免终结者:声称保证最终确定的唯一方法是System.runFinalizersOnExit和它的邪恶双胞胎Runtime.runFinalizersOnExit.这些方法存在致命缺陷,已被弃用.

项目66:同步对共享可变数据的访问:库提供了Thread.stop方法,但是这种方法很久以前就被弃用了,因为它本身就不安全 - 它的使用会导致数据损坏.

第70项:文档线程安全:该System.runFinalizersOnExit方法是线程不可用的,已被弃用.

第73项:避免线程组:它们允许您同时将某些Thread基元应用于一堆线程.其中一些原语已被弃用,其余原语很少使用.[...]线程组已过时.

所以至少在上述所有方法中,使用它们显然是错误的,至少根据Josh Bloch的说法.

与其他方法,你必须单独考虑的问题,并了解为什么他们被弃用,但一般来讲,当弃用的决定是有道理的,它往往会走向错误的比对瘦继续使用它们.

相关问题

  • "弃用"来自拉丁语"de"+"precare",意思是"祈祷反对".当某些东西被描述为弃用时,标准正在祈祷 - 乞求 - 你不要使用它; 这是一个警告,它可能会在该标准的未来版本中被删除.请注意,在该标准的当前版本的任何实现中都需要完全实现已弃用的功能.不过,你提到的自嘲幽默有点不合时宜; 在这种意义上,"自我贬低"是一种"自我贬低"的腐败,它具有不同的衍生和含义. (3认同)

Pet*_*ans 17

除了上面的所有优秀响应之外,我发现删除已弃用的API调用还有另一个原因.

正在研究为什么不推荐使用调用我经常发现自己在学习有关Java/API/Framework的有趣内容.通常有一个很好的理由可以推断某种方法,并了解这些原因可以获得更深入的见解.

因此,从学习/成长的角度来看,这也是值得的努力


Mic*_*zek 11

它当然不会产生性能问题 - 将来不推荐使用的功能可能是函数不再是库的一部分,因此您应该避免在新代码中使用它并更改旧代码以停止使用它,所以有一天升级struts并发现该函数不再存在时,你不会遇到问题


Jig*_*shi 8

你可能听说过"自嘲幽默"这个词.这是幽默,可以最大限度地减少你的重要性.不推荐使用的类或方法就是这样.它不再重要.事实上,它根本不应该被使用,因为它可能在将来不再存在.

尽量避免它


Boz*_*sov 7

这没错,只是不推荐.这通常意味着在这一点上有更好的做事方式,如果你使用新的改进方式,你会做得很好.一些被弃用的东西真的很危险,应该完全避免.新方法可以产生比被弃用方式更好的性能,但情况并非总是如此.