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不應該存在),那么很明顯,不應該使用棄用的代碼。
我覺得棄用的方法意味著; 還有一種替代方法可用,比現有方法在所有方面都更好。 最好使用比現有的方法更好的方法。 為了向后兼容,舊的方法被棄用。
總結
以上是生活随笔為你收集整理的jAvA中deprecate,在Java中使用Deprecated方法或类是错误的吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS设置
- 下一篇: java美元兑换,(Java实现) 美元