Ume*_*wte 152 java methods deprecated
我正在使用eclipse开发一个Web应用程序.就在今天,我通过更改JAR文件更新了我的struts版本.我正在某些地方收到警告,方法已被弃用,但代码工作正常.
我想知道一些事情
在Java中使用Deprecated方法或类是错误的吗?
如果我不更改任何方法并使用我的警告运行我的应用程序,它会产生任何性能问题.
aio*_*obe 263
1.在Java中使用Deprecated方法或类是不对的?
从弃用的定义:
注释@Deprecated的程序元素是程序员不鼓励使用的程序元素,通常是因为它很危险,或者因为存在更好的替代方案.
该方法保留在API中以便在未指定的时间段内向后兼容,并且可以在将来的版本中删除.也就是说,不,这没有错,但有一种更好的方法,它可以更好地抵御API变化.
2.如果我不更改任何方法并使用我的警告运行我的应用程序,它会产生任何性能问题.
很可能没有.它将继续像弃用之前一样工作.API方法的合同不会改变.如果某些内部数据结构发生变化而采用新的更好的方法,则可能会对性能产生影响,但这种情况不太可能发生.
在最有趣的弃用 Java API中,是海事组织,FontMetrics.getMaxDecent.弃用原因:拼写错误.
已过时.从JDK版本1.1.1开始,由getMaxDescent()取代.
aby*_*byx 28
您仍然可以在不改变性能的情况下使用已弃用的代码,但是弃用方法/类的全部目的是让用户知道现在有更好的方法使用它,并且在将来的版本中,可能会删除已弃用的代码.
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的说法.
与其他方法,你必须单独考虑的问题,并了解为什么他们被弃用,但一般来讲,当弃用的决定是有道理的,它往往会走向错误的比对瘦继续使用它们.
Pet*_*ans 17
除了上面的所有优秀响应之外,我发现删除已弃用的API调用还有另一个原因.
正在研究为什么不推荐使用调用我经常发现自己在学习有关Java/API/Framework的有趣内容.通常有一个很好的理由可以推断某种方法,并了解这些原因可以获得更深入的见解.
因此,从学习/成长的角度来看,这也是值得的努力
Mic*_*zek 11
它当然不会产生性能问题 - 将来不推荐使用的功能可能是函数不再是库的一部分,因此您应该避免在新代码中使用它并更改旧代码以停止使用它,所以有一天升级struts并发现该函数不再存在时,你不会遇到问题
你可能听说过"自嘲幽默"这个词.这是幽默,可以最大限度地减少你的重要性.不推荐使用的类或方法就是这样.它不再重要.事实上,它根本不应该被使用,因为它可能在将来不再存在.
尽量避免它
这没错,只是不推荐.这通常意味着在这一点上有更好的做事方式,如果你使用新的改进方式,你会做得很好.一些被弃用的东西真的很危险,应该完全避免.新方法可以产生比被弃用方式更好的性能,但情况并非总是如此.