Heim >Java >javaLernprogramm >Was ist illegaler reflektierender Zugriff in Java 9 und wie äußert er sich?

Was ist illegaler reflektierender Zugriff in Java 9 und wie äußert er sich?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 15:12:10301Durchsuche

What is Illegal Reflective Access in Java 9 and How Does It Manifest?

Ungültiger reflektierender Zugriff

In Java 9 bezieht sich illegaler reflektierender Zugriff auf Situationen, in denen reflektierende APIs auf eine Weise verwendet werden, die gegen die Prinzipien der erweiterten Kapselung verstößt durch das Modulsystem eingeführt. Dies kann auftreten, wenn Code aus einem Modul versucht, ohne entsprechende Autorisierung auf private oder geschützte Mitglieder von Klassen in einem anderen Modul zuzugreifen.

Definition des illegalen reflektierenden Zugriffs

Illegaler reflektierender Zugriff ist definiert als jede reflektierende Operation, die:

  • auf ein privates oder geschütztes Mitglied einer Klasse in einer anderen zugreift Modul
  • Ruft eine private Methode einer Klasse in einem anderen Modul auf
  • Ändert ein letztes Feld einer Klasse in einem anderen Modul
  • Erstellt eine Instanz einer Klasse, die nicht öffentlich sichtbar ist in einem anderen Modul

Triggering Umstände

Unzulässiger reflektiver Zugriff wird ausgelöst, wenn:

  • Eine Klasse in einem Modul nutzt Reflektion, um auf ein privates oder geschütztes Mitglied einer Klasse in einem anderen Modul zuzugreifen, das nicht explizit ist Dem ersten Modul durch eine Moduldeklaration oder ein VM-Argument zugänglich gemacht.
  • Eine Klasse in einem Modul verwendet Reflektion, um eine private Methode einer Klasse in einem anderen Modul aufzurufen, die nicht explizit ist dem ersten Modul ausgesetzt.
  • Eine Klasse in einem Modul verwendet Reflektion, um ein letztes Feld einer Klasse in einem anderen Modul zu ändern, das nicht explizit dem ersten Modul ausgesetzt ist.
  • Eine Klasse in einem Das Modul verwendet Reflektion, um eine Instanz einer Klasse zu erstellen, die in einem anderen Modul nicht öffentlich sichtbar ist.

Modulsystem und Relaxed Kapselung

Java 9 führte eine entspannte, starke Kapselungsregel ein, die bestimmte eingeschränkte Formen des reflektierenden Zugriffs ermöglicht. Insbesondere ermöglicht es dem Laufzeitsystem eines Moduls, Pakete im Modul zu öffnen, um in unbenannten Modulen zu codieren (d. h. Code im Klassenpfad). Wenn das Laufzeitsystem mit dieser Option aufgerufen wird und es gelingt, Reflektion dort zu verwenden, wo dies sonst fehlgeschlagen wäre, dann ist ein „illegaler“ Reflektionszugriff aufgetreten.

Warnmeldungen

Wenn ein illegaler reflektiver Zugriff auftritt, wird eine Warnmeldung im folgenden Format ausgegeben:

WARNUNG: Ungültiger reflektiver Zugriff durch $PERPETRATOR zu $VICTIM

wobei:

  • $PERPETRATOR ist der vollständig qualifizierte Name des Typs, der den Code enthält, der den Reflexionsvorgang aufgerufen hat, plus die Codequelle (JAR-Dateipfad), wenn verfügbar.
  • $VICTIM beschreibt das Mitglied, auf das zugegriffen wird, einschließlich des vollständig qualifizierten Namens der Anlage Typ.

Das obige ist der detaillierte Inhalt vonWas ist illegaler reflektierender Zugriff in Java 9 und wie äußert er sich?. 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