Maison >Java >javaDidacticiel >Qu'est-ce que l'accès réfléchissant illégal dans Java 9 et comment se manifeste-t-il ?

Qu'est-ce que l'accès réfléchissant illégal dans Java 9 et comment se manifeste-t-il ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 15:12:10302parcourir

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

Accès réfléchissant illégal

Dans Java 9, l'accès réfléchissant illégal fait référence à des situations dans lesquelles les API réfléchissantes sont utilisées d'une manière qui viole les principes d'encapsulation améliorés. introduit par le système de modules. Cela peut se produire lorsque le code d'un module tente d'accéder à des membres privés ou protégés de classes d'un autre module sans autorisation appropriée.

Définition de l'accès réfléchissant illégal

Accès réfléchissant illégal est défini comme toute opération réflexive qui :

  • Accès à un membre privé ou protégé d'une classe dans une autre module
  • Appelle une méthode privée d'une classe dans un autre module
  • Modifie un champ final d'une classe dans un autre module
  • Crée une instance d'une classe qui n'est pas visible publiquement dans un autre module

Déclenchement Circonstances

L'accès réflexif illégal est déclenché lorsque :

  • Une classe dans un module utilise la réflexion pour accéder à un membre privé ou protégé d'une classe dans un autre module qui n'est pas explicitement exposé au premier module via une déclaration de module ou un argument VM.
  • Une classe dans un module utilise la réflexion pour appeler une méthode privée d'une classe dans un autre module qui n'est pas explicitement exposé au premier module.
  • Une classe dans un module utilise la réflexion pour modifier un champ final d'une classe dans un autre module qui n'est pas explicitement exposé au premier module.
  • Une classe dans un Le module utilise la réflexion pour créer une instance d'une classe qui n'est pas visible publiquement dans un autre module.

Système de module et détendu Encapsulation

Java 9 a introduit une règle d'encapsulation détendue et forte qui autorise certaines formes limitées d'accès réfléchi. Plus précisément, il permet au système d'exécution d'un module d'ouvrir des packages dans le module pour coder dans des modules sans nom (c'est-à-dire du code sur le chemin de classe). Si le système d'exécution est invoqué avec cette option et qu'il réussit à utiliser la réflexion là où il aurait autrement échoué, alors un accès réflexif « illégal » s'est produit.

Messages d'avertissement

Lorsqu'un accès réflexif illégal se produit, un message d'avertissement est émis au format suivant :

AVERTISSEMENT : accès réflexif illégal par $PERPETRATOR à $VICTIM

où :

  • $PERPETRATOR est le nom complet du type contenant le code qui a invoqué l'opération de réflexion, plus la source du code (chemin du fichier JAR) si disponible .
  • $VICTIM décrit le membre consulté, y compris le nom complet du membre qui l'entoure. tapez.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn