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

从已弃用的定义 :

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

该方法被保存在API中,用于在未指定的时间段内向后兼容,并且可能在将来的版本中被删除。 也就是说,不,这没有错 ,但是有一个更好的方法可以做到这一点,这对API的变化更加强大。

2.如果我没有改变任何方法并且运行我的应用程序,那么我会有什么警告,会不会造成任何性能问题?

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

Java API中最有趣的弃用方法是FontMetrics.getMaxDecent 。 弃用的原因:拼写错误。

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

您仍然可以使用不推荐使用的代码而不改变性能,但是抛弃方法/类的全部意义在于让用户知道现在有更好的方法来使用它,而且在将来的版本中,可能会删除已弃用的代码。

术语

从官方的Sun词汇表:

弃用 :指不再推荐的类,接口,构造函数,方法或字段,并可能在将来的版本中停止存在。

从何时何地开始弃用指南:

你可能听说过“自嘲的幽默”这个词,或者幽默说话者的重要性最小化。 不推荐使用的类或方法就是这样。 这不再重要。 事实上,你不应该再使用它,因为它已被取代,将来可能不复存在。

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

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

参考

java.sun.com词汇表

语言指南/如何以及何时弃用API

注释types不推荐使用的API

对还是错?

使用弃用方法是否正确的问题将需要在个人基础上进行检查。 下面是有效Java第2版中出现“已弃用”一词的所有引号:

第7项:避免终结器 :声称保证终止的唯一方法是System.runFinalizersOnExit及其邪恶的双Runtime.runFinalizersOnExit 。 这些方法是致命的缺陷,已被弃用。

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

项目70:文档线程安全 : System.runFinalizersOnExit方法是线程敌对的,并已被弃用。

Item 73:避免线程组 :它们允许你一次性将特定的Thread原语应用到一堆线程。 其中有几个基元已被弃用,其余的基本不常使用。 线程组已经过时。

所以,至less在所有上述方法中,使用它们显然是错误的,至less按照Josh Bloch的说法。

用其他方法,你必须单独考虑这些问题,并理解为什么他们被弃用,但一般来说,当反对的决定是合理的,倾向于倾向于错误而不是正确的继续使用它们。

相关问题

弃用和传统API之间的区别?

除了上述所有出色的响应,我发现还有一个原因是删除不推荐的API调用。

研究为什么一个调用被弃用我经常发现自己学习了关于Java / API /框架的有趣的事情。 通常有一个很好的理由,为什么一个方法被弃用,理解这些原因导致更深刻的见解。

所以从学习/成长的angular度来看,这也是一个值得的努力

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

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

尽量避免它

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

一般来说不,使用deprecated方法并不是绝对错误,只要你有一个好的应急计划,以避免这些方法从你使用的库中消失时出现任何问题。 有了Java API本身,这绝不会发生,但随着其他任何东西,这意味着它将被删除。 如果您特别计划不升级( 尽pipe您最有可能应该从长远来看 )软件的支持库,那么使用deprecated方法没有问题。

没有。

是的,这是错的。

弃用的方法或类将在未来版本的Java中删除,不应使用。 在每种情况下,都应该有一个替代scheme。 使用它。

有些情况下,您必须使用已弃用的类或方法才能实现项目目标。 在这种情况下,你真的别无select,只能使用它。 Java的未来版本可能会破坏该代码,但如果这是一个要求,你必须忍受。 这可能不是你第一次为了满足项目要求而做错了事情,而且肯定不会是最后一次。

当您升级到新版本的Java或其他库时,有时您使用的方法或类已被弃用。 不推荐使用的方法不被支持,但不应该产生意想不到的结果。 这并不意味着他们不会尽快切换你的代码。

弃用过程是为了确保作者有足够的时间将代码从旧的API更改为新的API。 利用这个时间。 尽快更改您的代码。

这是没有错的,但是一些被弃用的方法在未来版本的软件中被删除了,所以你最终可能会得到不工作的代码。

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

不是这样的错误,但它可以为您节省一些麻烦。 下面是一个非常不鼓励使用不推荐的方法的例子:

为什么不推荐使用Thread.stop?

因为它本质上是不安全的。 停止线程会导致它解锁所有已locking的监视器。 (当ThreadDeathexception传播到堆栈时,监视器被解锁。)如果之前由这些监视器保护的对象处于不一致状态,则其他线程现在可以以不一致的状态查看这些对象。 据称这些物体被损坏。 当线程操作受损对象时,可能导致任意行为。 这种行为可能是微妙的,难以察觉,或者可能是明显的。 与其他未经检查的exception不同,ThreadDeath静默地杀死线程; 因此,用户没有警告他的程序可能被损坏。 在发生实际损害后,腐败现象可能会随时出现,甚至在未来数小时甚至数天。

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

在性能方面应该没有问题。 标准API旨在尊重一些向后兼容性,因此应用程序可以逐渐适应新版本的Java。

在Java中使用Deprecated方法或类是错误的吗? 这不是“错误的”,仍在工作,但尽可能避免。

假设存在一个与方法相关的安全漏洞,开发人员认定这是一个devise缺陷。 所以他们可能会决定放弃这个方法,并引入新的方法。

所以,如果你仍然使用旧的方法,你有一个威胁。 所以要注意到弃用的原因,并检查它是如何影响你的。

如果不改变任何方法,并运行我的应用程序警告,我会有什么,它会造成任何性能问题。

如果弃用是由于性能问题造成的,那么您将面临性能问题,否则没有理由有这样的问题。 再次想指出的是,要知道贬值的原因。

当然不是 – 因为整个Java得到@Deprecated :-)只要Java持续,你可以随意使用它们。 无论如何不会注意到任何差异,除非它真的被破坏了。 含义 – 必须阅读并决定。

然而,在.Net中,当声明了某个东西的时候,即使你之前没有使用它,你也应该马上去阅读这个东西 – 你有50%的机会比replace更有效率和/或更容易使用:-))

所以总的来说,这些天保持技术保守是相当有益的,但是你必须首先做好你的阅读工作。

在Java中,它被@Deprecated,在C#中是[Obsolete]。

我想我更喜欢C#的术语。 这只是意味着它已经过时了。 你仍然可以使用它,但可能有更好的方法。

这就像使用Windows 3.1而不是Windows 7,如果你相信Windows 3.1已经过时。 你仍然可以使用它,但未来的版本可能会有更好的function,而未来的版本可能会被支持 – 过时的版本将不会被支持。

Java的@deprecated也一样 – 你仍然可以使用这个方法,但是风险自担 – 将来可能有更好的select,甚至可能不被支持。

如果您使用的是不推荐使用的代码,则通常可以,只要您不必升级到更新的API,不build议使用的代码可能不存在。 我build议如果你看到使用不推荐的代码的东西,更新使用新的替代品(这通常在注释或Javadoc弃用的评论中指出)。

编辑:正如迈克尔所指出的,如果弃用的原因是由于function上的缺陷(或者因为function不应该存在),那么很明显,不应该使用弃用的代码。

我觉得弃用的方法意味着; 还有一种替代方法可用,比现有方法在所有方面都更好。 最好使用比现有的方法更好的方法。 为了向后兼容,旧的方法被弃用。

jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?相关推荐

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

    Cats萌萌 术语来自官方的Sun词汇表:deprecation:指不再推荐的类,接口,构造函数,方法或字段,可能在将来的版本中不再存在.从何时何时弃用指南:您可能已经听过"自我贬低的幽默& ...

  2. Android开发中,那些让你相见恨晚的方法、类或接口

    getParent().requestDisallowInterceptTouchEvent(true);剥夺父view 对touch 事件的处理权,谁用谁知道. ArgbEvaluator.eval ...

  3. struts2 中的 addActionError 、addFieldError、addActionMessage方法的区别添加错误信息

    转自:https://www.cnblogs.com/wangyp/archive/2011/07/13/2104828.html 一.addActionError("错误内容") ...

  4. 【java】深入理解Java JVM虚拟机中init和clinit的区别

    1.概述 转载并且补充:深入理解Java JVM虚拟机中init和clinit的区别 原创 之所以来转载一下,是因为,有个学弟问了这个问题 这个知识点,回顾起来应该是我看 深入理解Java JVM虚拟 ...

  5. JAVA学习笔记 03 - JAVA语言程序结构

    本文是Java基础课程的第三课.计算机语言的程序结构无外乎顺序结构.分支结构.循环结构,本文主要介绍Java语言中这些程序结构是如何实现的 文章目录 一.程序结构 二.分支结构 1.单分支if语句 2 ...

  6. 【Java零基础】Java初学者走向大师之路(2)

    Java标识符 标识符用来表示变量.方法或类等的名字. 定义的规则如下: 只能包含字母.数字.下划线和美元符号$. 不能以数字开头 严格区分大小写,如 a 和 A 是不同的标识符 没有长度限制 注意: ...

  7. [C# 类和对象]-C# 中的方法以及类和对象编程

    ################################################## 目录 C# 的方法 C# 定义方法 访问修饰符 返回值类型 方法名 参数列表 方法主体 方法名的命 ...

  8. 如何解决java.lang.NoClassDefFoundError:Java 9中的javax / xml / bind / JAXBException

    本文翻译自:How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9 I have s ...

  9. java 批量处理 示例_Java中异常处理的示例

    java 批量处理 示例 Here, we will analyse some exception handling codes, to better understand the concepts. ...

最新文章

  1. RSTP的根保护功能
  2. 全球及中国智能电网产业十四五规划方向及投资决策建议报告2021年版
  3. Jupyter notebook import tensorflow as tf 出错
  4. python中test_在python中生成py.test测试
  5. SpringCloud学习笔记006---使用properties配置文件实现多环境配置
  6. EnterpriseDb公司的Postgres Enterprise Manager 安装图解
  7. BZOJ3832: [Poi2014]Rally(拓扑排序 堆)
  8. tomcat启动报错 关键字:java.lang.NoClassDefFoundError和 java.lang.ClassNotFoundExceeption
  9. 小学数学与计算机整合课优质教案,优秀小学数学教学案例【小学数学教学与信息技术的结合】...
  10. 电信烽火2821t虚拟服务器设置,iTV使用指南-烽火智能高清机顶盒装维手册
  11. 《灵飞经》①洪武天下 第三章 东岛三尊
  12. Oracle中以insert values的形式同时插入多条记录
  13. 线性时不变因果系统的判断方法
  14. 北京科技大学本科毕业论文答辩和论文选题PPT模板
  15. VBA语言入门:一些简单语法在Excel应用实例
  16. ​韩剧影视剪辑30天5710元,短视频大神教你如何快速变现?
  17. 什么是PCB中的net和vl孔
  18. EMC 共模电感选型
  19. plupload文件上传插件使用
  20. 微信小程序入门-随机人脸生成

热门文章

  1. 【从入门到放弃-ZooKeeper】ZooKeeper实战-分布式队列
  2. AnalyticDB for PG 如何作为数据源对接帆软 FineBI
  3. AWD-LSTM为什么这么棒? 1
  4. Python API快餐教程(1) - 字符串查找API
  5. 【2018开年知识盛会】15位大咖直播分享,全方位解析NoSQL数据库
  6. 删除超过10亿用户的数据,Facebook 关闭面部识别系统
  7. 小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!
  8. 数据科学家常见的5个SQL面试问题
  9. 996!007!同是敲了2万行代码,为什么他却晋升了?
  10. 腾讯首度披露基础架构演进史:“海量之道”进化“生而为云”