Heim > Java > javaLernprogramm > Wie löst man die InaccessibleObjectException von Java 9: ​​Reflexions- und Modulsystemkonflikte?

Wie löst man die InaccessibleObjectException von Java 9: ​​Reflexions- und Modulsystemkonflikte?

Susan Sarandon
Freigeben: 2025-01-05 07:13:40
Original
165 Leute haben es durchsucht

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

Behebung der InaccessibleObjectException in Java 9: ​​Mitglieder können nicht zugänglich gemacht werden

Die InaccessibleObjectException entsteht in Java 9 aufgrund der strikten Kapselung des Java Platform Module Systems , wobei der Zugriff nur unter bestimmten Bedingungen wie öffentlicher Sichtbarkeit und Paket gewährt wird Exportierbarkeit.

Ursachen und Szenarien

Diese Ausnahme tritt normalerweise auf, wenn:

  • Eine Bibliothek oder ein Framework verwendet Reflektion, um auf JDK-Modulelemente zuzugreifen (Fall 1), wie z java.lang.ClassLoader.defineClass().
  • Reflexionsbasierte Bibliotheken/Frameworks (z. B. Spring) greifen auf Beans oder Entitäten des Anwendungscodes zu (Fall 2).

Auflösen Fall 1: Reflektierender Aufruf in JDK

Wie JDK-Module sind unveränderlich, die Lösung liegt in Befehlszeilen-Flags, die Pakete zur Reflexion öffnen. Um beispielsweise die Ausnahme zu beheben:

java --add-opens java.base/java.lang=ALL-UNNAMED
Nach dem Login kopieren

Fall 2 lösen: Reflexion über Anwendungscode

Wenn sich der reflektierende Code in einem bearbeitbaren Modul befindet, sollten Sie dessen Verbesserung in Betracht ziehen Moduldeskriptor:

  • Exporte: Veröffentlichen Sie das Paket und machen Sie es verfügbar auf den gesamten Code beim Kompilieren und zur Laufzeit.
  • exportiert ... nach: Veröffentlicht das Paket speziell im zugreifenden Modul.
  • öffnet: Zulassen Laufzeitzugriff (mit oder ohne Reflektion) auf das Paket für den gesamten Code.
  • öffnet ... für: Zulassen Laufzeitzugriff (mit oder ohne Reflektion) auf das Paket für ein bestimmtes Modul.
  • Modul öffnen: Öffnen Sie das gesamte Modul für Laufzeitzugriff (mit oder ohne Reflektion) auf den gesamten Code.

Andere Abhilfemaßnahmen

Nur ​​in Java 9 können Sie den Kapselungsschutz deaktivieren mit:

java --permit-illegal-access
Nach dem Login kopieren

Hinweis: Dieses Flag sollte aus Sicherheitsgründen sparsam verwendet werden. Weitere Informationen zu Modulkonfigurationen und Best Practices finden Sie in den verlinkten Ressourcen.

Das obige ist der detaillierte Inhalt vonWie löst man die InaccessibleObjectException von Java 9: ​​Reflexions- und Modulsystemkonflikte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage