首頁 >Java >java教程 >什麼是 Java 9 中的非法反射存取以及如何修復它?

什麼是 Java 9 中的非法反射存取以及如何修復它?

DDD
DDD原創
2024-12-05 03:07:13225瀏覽

What is Illegal Reflective Access in Java 9 and How Can I Fix It?

Java 9 中的非法反射存取

在Java 9 中引入模組化之後,開發人員遇到了與非法反射存取相關的問題。要完全掌握這個概念,首先要了解模組系統的「寬鬆強封裝」。

非法反射存取的定義

非法反射存取是指以不符合模組化設計原則的方式執行反射操作的情況。它違反了模組及其包之間建立的封裝屏障。

觸發警告的情況

非法反射訪問的警告在以下情況下觸發:

  • 模組在不使用正確的模組聲明或VM 參數的情況下存取另一個模組的內部套件(例如, --add-opens)。
  • 編譯後的程式碼存取內部 JDK API。

膠囊原則的放寬

Java 9 引入了 - -illegal-access 啟動器選項,預設為允許以幫助遷移。在允許模式下:

  • 對套件的第一個非法反射存取操作會產生警告。
  • 後續操作不會觸發警告。

配置模式

--illegal-access選項可以配置不同的模式:

  • debug:為每個非法存取提供警告和堆疊追蹤。
  • warn:為每個非法存取發出警告。
  • deny:禁止非法存取操作。

如何識別和修復

為了避免非法反射訪問,開發人員可以:

  • 使用--illegal-access =deny 運行應用程式以偵測未經授權的存取。
  • 識別使用jdeps 工具對JDK API 進行靜態引用(使用--jdk-internals

警告訊息

非法存取操作會導致以下格式的警告:

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM

其中:

  • $PERPETRATOR:呼叫反射的型別操作
  • $VICTIM:正在存取成員

確保未來相容性

為了確保未來相容性,消除非法反射存取和確保模組遵循正確的封裝原則。

以上是什麼是 Java 9 中的非法反射存取以及如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn