Oracle棄用sun.reflect.Reflection.getCallerClass

jopen 11年前發布 | 19K 次閱讀 Oracle

  英文原文:Oracle Discontinuing sun.reflect.Reflection.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 數據庫

來自: InfoQ
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!