Heim > Java > javaLernprogramm > Was ist illegaler reflektierender Zugriff in Java 9 und wie kann ich ihn beheben?

Was ist illegaler reflektierender Zugriff in Java 9 und wie kann ich ihn beheben?

DDD
Freigeben: 2024-12-05 03:07:13
Original
219 Leute haben es durchsucht

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

Illegaler reflektierender Zugriff in Java 9

Nach der Einführung der Modularität in Java 9 sind Entwickler auf Probleme im Zusammenhang mit illegalem reflektierendem Zugriff gestoßen. Um dieses Konzept vollständig zu verstehen, ist es wichtig, zunächst die „Relaxed-strong-encapsulation“ des Modulsystems zu verstehen.

Definition von illegalem reflektierendem Zugriff

Illegaler reflektierender Zugriff bezieht sich auf Situationen, in denen reflektierende Operationen auf eine Art und Weise durchgeführt werden, die nicht durch die Prinzipien des modularen Designs vorgesehen ist. Es verstößt gegen die Kapselungsbarrieren, die zwischen Modulen und ihren Paketen bestehen.

Umstände, die die Warnung auslösen

Die Warnung vor illegalem reflektierendem Zugriff wird ausgelöst, wenn:

  • Ein Modul greift auf interne Pakete eines anderen Moduls zu, ohne die richtigen Moduldeklarationen oder VM-Argumente zu verwenden (z. B. --add-opens).
  • Kompilierter Code greift auf interne JDK-APIs zu.

Lockerung der Kapselprinzipien

Java 9 führte die - ein -illegal-access-Launcheroption mit der Standardeinstellung „permit“ zur Unterstützung der Migration. Im Genehmigungsmodus:

  • Der erste illegale reflektive Zugriffsvorgang auf ein Paket generiert eine Warnung.
  • Nachfolgende Vorgänge lösen keine Warnungen aus.

Konfigurationsmodi

Die Option --illegal-access kann mit verschiedenen konfiguriert werden Modi:

  • debug: Stellt Warnungen und Stacktraces für jeden illegalen Zugriff bereit.
  • warn: Gibt Warnungen für jeden illegalen Zugriff aus.
  • deny: Verbietet illegale Zugriffsvorgänge.

Wie man erkennt und Fix

Um illegalen reflektierenden Zugriff zu vermeiden, können Entwickler:

  • Anwendungen mit --illegal-access=deny ausführen, um unbefugten Zugriff zu erkennen.
  • Identifizieren Statische Verweise auf JDK-APIs mithilfe des jdeps-Tools (mit der Option --jdk-internals Option).

Warnmeldung

Unzulässige reflektive Zugriffsvorgänge führen zu Warnungen im folgenden Format:

WARNING: Illegal reflective access by $PERPETRATOR to $VICTIM
Nach dem Login kopieren

wobei:

  • $PERPETRATOR: Typ, der das Reflektierte aufgerufen hat Operation
  • $VICTIM: Auf Mitglied wird zugegriffen

Zukünftige Kompatibilität sicherstellen

Um zukünftige Kompatibilität sicherzustellen, ist es wichtig, illegale reflektierende Zugriffe und zu eliminieren Stellen Sie sicher, dass die Module den richtigen Kapselungsprinzipien folgen.

Das obige ist der detaillierte Inhalt vonWas ist illegaler reflektierender Zugriff in Java 9 und wie kann ich ihn beheben?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage