Rumah > Java > javaTutorial > Bagaimanakah saya Boleh Menyelesaikan InaccessibleObjectException Java 9?

Bagaimanakah saya Boleh Menyelesaikan InaccessibleObjectException Java 9?

Barbara Streisand
Lepaskan: 2024-12-27 02:49:14
asal
556 orang telah melayarinya

How Can I Resolve Java 9's InaccessibleObjectException?

Mengatasi InaccessibleObjectException dalam Java 9

InaccessibleObjectException muncul dalam pelbagai senario dengan Java 9, selalunya melibatkan perpustakaan atau rangka kerja pihak ketiga yang menggunakan refleksi untuk berinteraksi dengan Java Development Kit (JDK) atau kod aplikasi. Berikut ialah penjelasan tentang isu tersebut dan cara untuk memintasnya.

Punca dan Implikasi

Java 9 memperkenalkan Sistem Modul, menguatkuasakan kekangan pengkapsulan yang lebih kuat. Akses kepada elemen (cth., kelas, kaedah) dihadkan melainkan kriteria tertentu dipenuhi. Sekatan ini meliputi operasi refleksi, seperti setAccessible(), yang cuba memintas had akses.

Pecahan Mesej Pengecualian

Mesej pengecualian menyediakan maklumat penting:

Unable to make {member} accessible: module {A} does not "opens {package}" to {B}
Salin selepas log masuk
  • {A}: Modul yang tidak boleh diakses (mis., java.base)
  • {ahli}: Elemen tidak boleh diakses yang ditentukan (cth., kaedah defineClass)
  • {package}: Ketidakbolehcapaian digunakan pada elemen dalam pakej ini (cth., java.lang)
  • {B}: Modul yang meminta (biasanya modul yang tidak dinamakan seperti @1941a8ff)

Strategi Penyelesaian

Bergantung pada senario, strategi yang berbeza boleh menyelesaikan isu tersebut. Terdapat dua kes utama:

Kes 1: Panggilan Refleksi ke JDK

  • Disebabkan ketakbolehubah JDK, pembetulan melibatkan bendera baris perintah JVM.
  • Gunakan --add-opens dengan sintaks {A}/{package}={B} untuk membuka pakej khusus untuk refleksi.

Kes 2: Refleksi terhadap Kod Aplikasi

  • Modul yang tidak boleh diakses boleh diubah suai untuk membuka bahagian dalamannya.
  • Gunakan arahan eksport atau buka dalam deskriptor modul untuk mengkonfigurasi kebolehaksesan pengehadan.
  • Pilihan termasuk mengeksport atau membuka pakej khusus kepada modul yang meminta atau semua kod.

Pertimbangan Tambahan

  • Dalam senario tertentu, mungkin perlu menggunakan berbilang --add-opens bendera.
  • Sebagai langkah terakhir, bendera --permit-illegal-access (hanya tersedia di Java 9) boleh digunakan untuk membolehkan capaian reflektif merentas modul. Walau bagaimanapun, ini harus dianggap sebagai penyelesaian sementara kerana implikasi keselamatan.

Atas ialah kandungan terperinci Bagaimanakah saya Boleh Menyelesaikan InaccessibleObjectException Java 9?. 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