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
123 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!

sumber:php.cn
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