Maison > Java > javaDidacticiel > Comment puis-je appeler des méthodes privées à l'aide de Reflection en Java malgré les restrictions d'accès ?

Comment puis-je appeler des méthodes privées à l'aide de Reflection en Java malgré les restrictions d'accès ?

Susan Sarandon
Libérer: 2024-11-08 22:22:02
original
505 Les gens l'ont consulté

How Can I Invoke Private Methods Using Reflection in Java Despite Access Restrictions?

Utiliser la réflexion pour invoquer des méthodes privées

Malgré la restriction de Java sur l'accès aux méthodes privées via la réflexion, il existe une solution pour surmonter cette limitation. Pour invoquer une méthode privée via réflexion, on peut utiliser l'approche suivante :

Tout d'abord, obtenez la méthode privée en utilisant getDeclaredMethod(String methodName) au lieu de getMethod(String methodName). Cette méthode permet d'accéder aux méthodes publiques et privées déclarées dans la classe actuelle.

Ensuite, pour contourner la restriction d'accès par défaut sur les méthodes privées, utilisez la méthode setAccessible(boolean accessible) pour accorder l'accessibilité. En définissant accessible sur true, vous remplacez les paramètres de protection et autorisez l'invocation de la méthode privée.

Enfin, invoquez la méthode privée en utilisant Invoke(Object object, Object... args) avec l'objet souhaité et tout élément requis arguments.

Voici une version mise à jour du code fourni dans la question d'origine :

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);
Copier après la connexion

Avertissements :

  • getDeclaredMethod restreint l'accès aux méthodes déclarées dans la classe actuelle, et non aux méthodes héritées. Les méthodes héritées nécessitent de parcourir la hiérarchie des classes concrètes.
  • SecurityManager peut potentiellement empêcher l'utilisation de setAccessible. Dans de tels cas, envisagez d'exécuter le code en tant que PrivilegedAction en utilisant AccessController ou Subject.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal