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

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不应该存在),那么很明显,不应该使用弃用的代码。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java运算符试题,编程语⾔⾯试题之新版javase基础语法篇之运算符

简介:⾯试中 短路运算符 和 位运算考点:计算机基础运算知识难度【** *】你知道 运算符 &和&&、|和||的区别吗?& 按位与操作只有对应的两个⼆进制数为1时,结果位才为11&1 11&0 00&1 00&0 0| 按…

matlab 流固耦合,详讲流固耦合

引言近来,航空航天工业在世界上发展迅速,而作为“飞机心脏”的航空发动机是限制其发展的主要因素。目前,航空发动机日益向高负荷、高效率和高可靠性的趋势发展,高负荷导致的高逆压力梯度容易引起流动分离,同时随着科技…

php加大session,PHP :: Bug #63251 :: yaf session功能增强

[2012-10-10 06:34 UTC] vipcenter at vip dot qq dot comDescription:------------一:建议增加:设置和获取session_id的方法!如:Session::getInstance()->id(qtvv60cui9c22qlk2fqr0na1d1);如果不传参则返回当前使用的session_id二&#x…

php提示是否运行,php运行错误提示

第一种方法在php.ini文件里改变display_errors和error_reporting的值,没有的直接加上。; 第一处修改; display_errors Offdisplay_errors On; 第二处修改; error_reporting E_ALL & ~E_DEPRECATED & ~E_STRICTerror_reporting E_ALL | E_STRICTdisplay_…

php stream encoding,PHP之mb_check_encoding使用方法分享

本文主要和大家分享mb_check_encoding使用方法,希望能帮助到大家。mb_check_encoding(PHP 4 > 4.4.3, PHP 5 > 5.1.3, PHP 7)mb_check_encoding — Check if the string is valid for the specified encodingmb_check_encoding — 检查字符串在指定的编码里是…

usb转ttl模块与matlab,图文详解USB转TTL设备与电路板的连接

描述USB转TTL的硬件设备:USB转TTL主机一台;芯片选用PL-2303HXUSB转TTL刷机线,采用进口PL2303HX芯片。连接上电脑并安装驱动后,电脑即扩展出一个COM3或COM4....等的串口,配合相应软件就能对路由器、机顶盒或接收机等各种TTL接口的设备系统进行…

php乱码调试,NotePad++ 调试PHP代码中文显示乱码

最近在NotePad上调试PHP代码,按照示例代码进行调试,结果在显示中文的时候显示一堆乱码,于是上网百度,有2种方法可以解决:按调试方式有2种方法:1、菜单插件-NppExec:“插件”-“NppExec”-"Console Out…

php怎么设置网站的字符编码,php如何设置字符编码

php如何设置字符编码?a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charsetgb2312"),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编…

oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象

因为需求需要重建EM,重建时因为某些错误被迫停止,比如对象已存在、用户已经存在等,最终找出了创建必备的条件;1.环境变量(Oracle和Grid在同一个用户下安装):ORACLE_HOME 要设为DB路径;ORACLE_UNQNAME 要设置;2.删除em相关的同义词:select drop public synonym ||syn…

oracle导出数据视频教程,Oracle导入导出数据的几种方式

oracle导入导出数据1.导出dmp格式文件--备份某几张表 !!!!exp smsc/smsc file/data/oracle_bak/dmp/bakup0209_2.dmp tables\(send_msg_his,send_msg,recv_msg_his,recv_msg\)--备份整个数据库 !!&#xff…

oracle undo管理机制,Oracle UNDO数据概念和管理

UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性.UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使…

php ldap 模块,不重新编译为PHP增加LDAP模块的支持

不重新编译为PHP增加LDAP模块的支持2018-11-28安装步骤1、进入到php安装源码目录rootvm-199:~/lnmp0.9# cd php-5.3.28rootvm-199:~/lnmp0.9/php-5.3.28# cd ext/ldap/rootvm-199:~/lnmp0.9/php-5.3.28/ext/ldap# lltotal 136drwxr-xr-x 3 501 staff 4096 2014-08-06 17:17 ./d…

oracle11区分大小写,修改Oracle11g用户密码不区分大小写

连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> show  parameter sec_case_sensitive_logonNAME TYPE VAL…

linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...

本文仅限于介绍 linux 下的库。1.2、 库的种类linux 下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。静态用.a为后缀, 例如: libhell…

linux服务器做页面,linux服务器搭建在线预览环境

linux版本 Centos.x86_64需要下载的工具包openoffice选择 Linux x86_64 rpm chinese简体中文包解压并安装安装openofficetar zxvf Apache_OpenOffice_4.0.1_Linux_x86-64_install-rpm_zh-CN.tar.gzcd RPEMrpm -Uivh *.rpm --nodeps –force启动openofficesoffice -headless -ac…

linux ssh 防火墙端口设置,linux修改SSH端口与iptables防火墙配置linux操作系统 -电脑资料...

一般情况下我们都不会使用系统默认的22端口做为ssh连接端口了,下面我来给大家介绍linux修改SSH端口然后再在iptables防火墙配置打开你配置的端口方法,如果你开了ssh端口没有在iptables防火墙配置依然会连接不上哦,linux修改ssh端口22代码如下…

linux为什么要禁止内核抢占,为什么linux在内核代码持有自旋锁后禁用内核抢占?...

我是Linux的新手,正在阅读Rubini& amp;的Linux设备驱动程序.科比特.我对一个与自旋锁相关的陈述感到困惑;这本书说明If a nonpreemptive uniprocessor system ever went into aspin on a lock, it would spin forever; no other thread would ever be able to obtainthe CP…

英飞凌TC3xx之一起认识DSADC系列(七)应用实战项目二(实现旋变软解码)

英飞凌TC3xx之一起认识DSADC系列(七) 1 项目要求2 项目实现2.1 内部时钟配置2.2 输入信号配置2.3 调制器配置2.4 滤波器链路配置2.5 整流器配置3 总结本文写一篇关于DSADC的resover的载波信号生成的应用,刚刚接触DSADC的开发者很容易被手册中简短的文字描述弄的迷惑,它到底…

linux 两块硬盘 分区,linux 两块硬盘分区,这个是什么/dev/mapper/VolGroup00-LogVol00

df -lh查看Filesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup00-LogVol00 1.8T 823G 874G 49% //dev/sda1 99M 13M 82M 14% /boottmpfs 7.8G 4.1G 3.8G 53% /dev/shm安装的时候/dev/sdb1 是挂在/home下面的,现在怎么找不到了现在我怎么查看/dev/sdb1…

linux qemu运行windows,用qemu搭建CentOS 6 for colinux虚拟系统——《Windows下搭建CentOS 6开发环境之一》...

用qemu搭建CentOS 6 for colinux虚拟系统一、安装的软硬件环境操作系统: Windows XP SP3硬件环境: CPU AMD 速龙AthlonII X3 445 (3.1GHz/AM3/3*512KB二缓/45纳米)内存 Corsair 海盗船 CMX4GX3M2A1600C9 DDR3 1600 4G(2G*2)硬盘 Seagate 希捷 ST3100052…