Rumah > Java > javaTutorial > Bagaimana untuk Menyelesaikan InaccessibleObjectException Java 9: ​​Konflik Sistem Refleksi dan Modul?

Bagaimana untuk Menyelesaikan InaccessibleObjectException Java 9: ​​Konflik Sistem Refleksi dan Modul?

Susan Sarandon
Lepaskan: 2025-01-05 07:13:40
asal
191 orang telah melayarinya

How to Solve Java 9's InaccessibleObjectException:  Reflection and Module System Conflicts?

Mengatasi InaccessibleObjectException dalam Java 9: ​​Tidak Dapat Menjadikan Ahli Boleh Diakses

InaccessibleObjectException timbul dalam Java 9 disebabkan oleh enkapsulasi ketat Sistem Modul Platform Java , memberikan akses hanya dalam keadaan tertentu seperti keterlihatan awam dan pakej keboleheksportan.

Punca dan Senario

Pengecualian ini biasanya berlaku apabila:

  • Pustaka atau rangka kerja menggunakan refleksi untuk mengakses elemen modulJDK (kes 1), seperti java.lang.ClassLoader.defineClass().
  • Perpustakaan/rangka kerja berasaskan refleksi (cth. Spring) mengakses kacang atau entiti kod aplikasi (kes 2).

Menyelesaikan Kes 1: Panggilan Reflektif Ke JDK

Memandangkan modul JDK tidak boleh diubah, penyelesaiannya terletak pada bendera baris arahan yang membuka pakej untuk refleksi. Sebagai contoh, untuk menyelesaikan pengecualian:

java --add-opens java.base/java.lang=ALL-UNNAMED
Salin selepas log masuk

Menyelesaikan Kes 2: Refleksi Terhadap Kod Aplikasi

Jika kod pemantulan berada dalam modul boleh diedit, pertimbangkan untuk meningkatkannya deskriptor modul:

  • eksport: Terbitkan pakej, menjadikannya tersedia untuk semua kod pada kompilasi dan masa jalan.
  • eksport ... ke: Terbitkan pakej ke modul mengakses secara khusus.
  • dibuka: Benarkan akses masa jalan (dengan atau tanpa refleksi) ke pakej untuk semua kod.
  • membuka ... kepada: Benarkan akses masa jalan (dengan atau tanpa refleksi) kepada pakej untuk modul tertentu.
  • buka modul: Buka keseluruhan modul untuk akses masa jalan (dengan atau tanpa refleksi) kepada semua kod.

Pemulihan Lain

Di Java 9 sahaja, anda boleh melumpuhkan perlindungan enkapsulasi dengan:

java --permit-illegal-access
Salin selepas log masuk

Nota: Bendera ini harus digunakan dengan berhati-hati kerana implikasi keselamatan. Rujuk sumber yang dipautkan untuk mendapatkan butiran lanjut tentang konfigurasi modul dan amalan terbaik.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan InaccessibleObjectException Java 9: ​​Konflik Sistem Refleksi dan Modul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan