轉:Oracle棄用sun.reflect.Reflection.getCallerClass

來源:互聯網
上載者:User

標籤:http   io   ar   使用   sp   java   strong   on   資料   

http://www.infoq.com/cn/news/2013/07/Oracle-Removes-getCallerClass

 

作為Java開發人員,我們經常忽略@Deprecated注釋,繼續使用這些功能,即使我們很清楚Oracle會在某個時間拿到這一標籤,但仍然幻想著這些標籤像刻在石頭上那樣不可磨滅。

從jdk 7u40開始,Oracle已經棄用了sun.reflect.package包裡不易理解的Reflection.getCallerClass(int)方法。在Java 7中,通過設定Java命令列選項Djdk.reflect.allowGetCallerClass,可以繼續使用該方法。但在Java 8及以後的版本中,該方法將被徹底刪除,調用它會導致UnsupportedOperationException異常。

根據Java文檔,Reflection類位於調用棧中的0幀位置,該方法返回調用棧中從0幀開始的第x幀中的類。總之,getCallerClass方法提供的機制可用於確定調用者,從而實現“感知調用者(Caller Sensitive)”的行為,即根據調用類或調用棧中的其它類來調整其自身的行為。

JDK團隊希望知道getCallerClass方法在應用程式中是如何使用的,能否修改這些代碼使之不再依賴任何sun.* API。你可以加入OpenJDK core-dev-libs郵件清單來反饋意見。

多年來,Oracle一直在提醒開發人員,調用sun.*包裡面的方法是危險的。關於這點,讀者可以閱讀Oracle部落格上的說明文章“為什麼開發人員不應該調用‘sun’包”。總之,使用這些已棄用的特性很容易出問題。隨著平台的變化,它們可能隨時被轉移、刪除或者更改語義。

然而,如果你使用了感知調用者的行為,也無需失去信心。JDK增強提案(JEP176)呼籲提高JDK方法處理的實現的安全性,使用可以可靠地識別的感知調用者方法的機制代替現有的人工維護的方法列表。

繼續關注該問題,可以訪問Oracle Bug資料庫。

參考英文原文:Oracle Discontinuing sun.reflect.Reflection.getCallerClass

感謝馬國耀對本文的審校。

轉:Oracle棄用sun.reflect.Reflection.getCallerClass

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.