jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?
1.在Java中使用Deprecated方法或類是錯(cuò)誤的嗎?
從已棄用的定義 :
注釋@Deprecated的程序元素是程序員不鼓勵(lì)使用的程序元素,通常是因?yàn)樗俏kU(xiǎn)的,或者是因?yàn)榇嬖诟玫膕elect。
該方法被保存在API中,用于在未指定的時(shí)間段內(nèi)向后兼容,并且可能在將來的版本中被刪除。 也就是說,不,這沒有錯(cuò) ,但是有一個(gè)更好的方法可以做到這一點(diǎn),這對(duì)API的變化更加強(qiáng)大。
2.如果我沒有改變?nèi)魏畏椒ú⑶疫\(yùn)行我的應(yīng)用程序,那么我會(huì)有什么警告,會(huì)不會(huì)造成任何性能問題?
最有可能沒有。 它將繼續(xù)按照棄用的方式工作。 API方法的合同不會(huì)改變。 如果一些內(nèi)部數(shù)據(jù)結(jié)構(gòu)改變,而采用新的,更好的方法,則可能會(huì)對(duì)性能產(chǎn)生影響,但這種情況不太可能發(fā)生。
Java API中最有趣的棄用方法是FontMetrics.getMaxDecent 。 棄用的原因:拼寫錯(cuò)誤。
已過時(shí)。 從JDK版本1.1.1開始,由getMaxDescent()取代。
您仍然可以使用不推薦使用的代碼而不改變性能,但是拋棄方法/類的全部意義在于讓用戶知道現(xiàn)在有更好的方法來使用它,而且在將來的版本中,可能會(huì)刪除已棄用的代碼。
術(shù)語
從官方的Sun詞匯表:
棄用 :指不再推薦的類,接口,構(gòu)造函數(shù),方法或字段,并可能在將來的版本中停止存在。
從何時(shí)何地開始棄用指南:
你可能聽說過“自嘲的幽默”這個(gè)詞,或者幽默說話者的重要性最小化。 不推薦使用的類或方法就是這樣。 這不再重要。 事實(shí)上,你不應(yīng)該再使用它,因?yàn)樗驯蝗〈?#xff0c;將來可能不復(fù)存在。
@Deprecated注釋更進(jìn)一步,并警告危險(xiǎn):
注釋@Deprecated的程序元素是程序員不鼓勵(lì)使用的程序元素,通常是因?yàn)樗俏kU(xiǎn)的 ,或者是因?yàn)榇嬖诟玫膕elect。
參考
java.sun.com詞匯表
語言指南/如何以及何時(shí)棄用API
注釋types不推薦使用的API
對(duì)還是錯(cuò)?
使用棄用方法是否正確的問題將需要在個(gè)人基礎(chǔ)上進(jìn)行檢查。 下面是有效Java第2版中出現(xiàn)“已棄用”一詞的所有引號(hào):
第7項(xiàng):避免終結(jié)器 :聲稱保證終止的唯一方法是System.runFinalizersOnExit及其邪惡的雙Runtime.runFinalizersOnExit 。 這些方法是致命的缺陷,已被棄用。
第66項(xiàng):同步對(duì)共享可變數(shù)據(jù)的訪問 :這些庫提供了Thread.stop方法,但是這種方法很久以前就被棄用了,因?yàn)樗举|(zhì)上是不安全的 – 它的使用會(huì)導(dǎo)致數(shù)據(jù)損壞。
項(xiàng)目70:文檔線程安全 : System.runFinalizersOnExit方法是線程敵對(duì)的,并已被棄用。
Item 73:避免線程組 :它們?cè)试S你一次性將特定的Thread原語應(yīng)用到一堆線程。 其中有幾個(gè)基元已被棄用,其余的基本不常使用。 線程組已經(jīng)過時(shí)。
所以,至less在所有上述方法中,使用它們顯然是錯(cuò)誤的,至less按照J(rèn)osh Bloch的說法。
用其他方法,你必須單獨(dú)考慮這些問題,并理解為什么他們被棄用,但一般來說,當(dāng)反對(duì)的決定是合理的,傾向于傾向于錯(cuò)誤而不是正確的繼續(xù)使用它們。
相關(guān)問題
棄用和傳統(tǒng)API之間的區(qū)別?
除了上述所有出色的響應(yīng),我發(fā)現(xiàn)還有一個(gè)原因是刪除不推薦的API調(diào)用。
研究為什么一個(gè)調(diào)用被棄用我經(jīng)常發(fā)現(xiàn)自己學(xué)習(xí)了關(guān)于Java / API /框架的有趣的事情。 通常有一個(gè)很好的理由,為什么一個(gè)方法被棄用,理解這些原因?qū)е赂羁痰囊娊狻?/p>
所以從學(xué)習(xí)/成長的angular度來看,這也是一個(gè)值得的努力
它當(dāng)然不會(huì)造成性能問題 – 在將來不推薦使用的方式,函數(shù)可能不再是庫的一部分,所以您應(yīng)該避免在新代碼中使用它,并更改舊代碼以停止使用它,所以有一天,當(dāng)你升級(jí)struts并發(fā)現(xiàn)該function不再存在時(shí),你不會(huì)遇到問題
你可能聽說過“自嘲幽默”這個(gè)詞。 這是幽默,最大限度地減less你的重要性。 不推薦使用的類或方法就是這樣。 這不再重要。 事實(shí)上,它不應(yīng)該再被使用,因?yàn)樗鼘砜赡軙?huì)不復(fù)存在。
盡量避免它
這沒有錯(cuò),只是不推薦。 這通常意味著在這一點(diǎn)上有更好的做事方式,如果你使用新的改進(jìn)方式,你會(huì)做得很好。 一些棄用的東西是非常危險(xiǎn)的,應(yīng)該完全避免。 新方法可以產(chǎn)生比已棄用的更好的性能,但事實(shí)并非總是如此。
一般來說不,使用deprecated方法并不是絕對(duì)錯(cuò)誤,只要你有一個(gè)好的應(yīng)急計(jì)劃,以避免這些方法從你使用的庫中消失時(shí)出現(xiàn)任何問題。 有了Java API本身,這絕不會(huì)發(fā)生,但隨著其他任何東西,這意味著它將被刪除。 如果您特別計(jì)劃不升級(jí)( 盡pipe您最有可能應(yīng)該從長遠(yuǎn)來看 )軟件的支持庫,那么使用deprecated方法沒有問題。
沒有。
是的,這是錯(cuò)的。
棄用的方法或類將在未來版本的Java中刪除,不應(yīng)使用。 在每種情況下,都應(yīng)該有一個(gè)替代scheme。 使用它。
有些情況下,您必須使用已棄用的類或方法才能實(shí)現(xiàn)項(xiàng)目目標(biāo)。 在這種情況下,你真的別無select,只能使用它。 Java的未來版本可能會(huì)破壞該代碼,但如果這是一個(gè)要求,你必須忍受。 這可能不是你第一次為了滿足項(xiàng)目要求而做錯(cuò)了事情,而且肯定不會(huì)是最后一次。
當(dāng)您升級(jí)到新版本的Java或其他庫時(shí),有時(shí)您使用的方法或類已被棄用。 不推薦使用的方法不被支持,但不應(yīng)該產(chǎn)生意想不到的結(jié)果。 這并不意味著他們不會(huì)盡快切換你的代碼。
棄用過程是為了確保作者有足夠的時(shí)間將代碼從舊的API更改為新的API。 利用這個(gè)時(shí)間。 盡快更改您的代碼。
這是沒有錯(cuò)的,但是一些被棄用的方法在未來版本的軟件中被刪除了,所以你最終可能會(huì)得到不工作的代碼。
在Java中使用Deprecated方法或類是錯(cuò)誤的嗎?“
不是這樣的錯(cuò)誤,但它可以為您節(jié)省一些麻煩。 下面是一個(gè)非常不鼓勵(lì)使用不推薦的方法的例子:
為什么不推薦使用Thread.stop?
因?yàn)樗举|(zhì)上是不安全的。 停止線程會(huì)導(dǎo)致它解鎖所有已locking的監(jiān)視器。 (當(dāng)ThreadDeathexception傳播到堆棧時(shí),監(jiān)視器被解鎖。)如果之前由這些監(jiān)視器保護(hù)的對(duì)象處于不一致狀態(tài),則其他線程現(xiàn)在可以以不一致的狀態(tài)查看這些對(duì)象。 據(jù)稱這些物體被損壞。 當(dāng)線程操作受損對(duì)象時(shí),可能導(dǎo)致任意行為。 這種行為可能是微妙的,難以察覺,或者可能是明顯的。 與其他未經(jīng)檢查的exception不同,ThreadDeath靜默地殺死線程; 因此,用戶沒有警告他的程序可能被損壞。 在發(fā)生實(shí)際損害后,腐敗現(xiàn)象可能會(huì)隨時(shí)出現(xiàn),甚至在未來數(shù)小時(shí)甚至數(shù)天。
如果不改變?nèi)魏畏椒?#xff0c;并運(yùn)行我的應(yīng)用程序,如果我有警告,它會(huì)產(chǎn)生任何性能問題。
在性能方面應(yīng)該沒有問題。 標(biāo)準(zhǔn)API旨在尊重一些向后兼容性,因此應(yīng)用程序可以逐漸適應(yīng)新版本的Java。
在Java中使用Deprecated方法或類是錯(cuò)誤的嗎? 這不是“錯(cuò)誤的”,仍在工作,但盡可能避免。
假設(shè)存在一個(gè)與方法相關(guān)的安全漏洞,開發(fā)人員認(rèn)定這是一個(gè)devise缺陷。 所以他們可能會(huì)決定放棄這個(gè)方法,并引入新的方法。
所以,如果你仍然使用舊的方法,你有一個(gè)威脅。 所以要注意到棄用的原因,并檢查它是如何影響你的。
如果不改變?nèi)魏畏椒?#xff0c;并運(yùn)行我的應(yīng)用程序警告,我會(huì)有什么,它會(huì)造成任何性能問題。
如果棄用是由于性能問題造成的,那么您將面臨性能問題,否則沒有理由有這樣的問題。 再次想指出的是,要知道貶值的原因。
當(dāng)然不是 – 因?yàn)檎麄€(gè)Java得到@Deprecated :-)只要Java持續(xù),你可以隨意使用它們。 無論如何不會(huì)注意到任何差異,除非它真的被破壞了。 含義 – 必須閱讀并決定。
然而,在.Net中,當(dāng)聲明了某個(gè)東西的時(shí)候,即使你之前沒有使用它,你也應(yīng)該馬上去閱讀這個(gè)東西 – 你有50%的機(jī)會(huì)比replace更有效率和/或更容易使用:-))
所以總的來說,這些天保持技術(shù)保守是相當(dāng)有益的,但是你必須首先做好你的閱讀工作。
在Java中,它被@Deprecated,在C#中是[Obsolete]。
我想我更喜歡C#的術(shù)語。 這只是意味著它已經(jīng)過時(shí)了。 你仍然可以使用它,但可能有更好的方法。
這就像使用Windows 3.1而不是Windows 7,如果你相信Windows 3.1已經(jīng)過時(shí)。 你仍然可以使用它,但未來的版本可能會(huì)有更好的function,而未來的版本可能會(huì)被支持 – 過時(shí)的版本將不會(huì)被支持。
Java的@deprecated也一樣 – 你仍然可以使用這個(gè)方法,但是風(fēng)險(xiǎn)自擔(dān) – 將來可能有更好的select,甚至可能不被支持。
如果您使用的是不推薦使用的代碼,則通常可以,只要您不必升級(jí)到更新的API,不build議使用的代碼可能不存在。 我build議如果你看到使用不推薦的代碼的東西,更新使用新的替代品(這通常在注釋或Javadoc棄用的評(píng)論中指出)。
編輯:正如邁克爾所指出的,如果棄用的原因是由于function上的缺陷(或者因?yàn)閒unction不應(yīng)該存在),那么很明顯,不應(yīng)該使用棄用的代碼。
我覺得棄用的方法意味著; 還有一種替代方法可用,比現(xiàn)有方法在所有方面都更好。 最好使用比現(xiàn)有的方法更好的方法。 為了向后兼容,舊的方法被棄用。
總結(jié)
以上是生活随笔為你收集整理的jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS设置
- 下一篇: apache启服务命令_Linux系统重