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
DDDOriginal
2024-12-05 03:07:13217Durchsuche

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

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!

Stellungnahme:
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