Invocation de méthodes privées par réflexion
En Java, l'invocation de méthodes privées par réflexion directe n'est pas autorisée. Cependant, il existe des approches alternatives pour obtenir cette fonctionnalité.
Considérez le scénario suivant dans lequel une méthode, initialement définie comme privée, doit être invoquée par réflexion :
Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null);
Ce code tente de obtenir une référence à la méthode privée spécifiée par l'attribut "methodName". Cependant, cette approche déclenche une "NoSuchMethodException" car les méthodes privées sont inaccessibles via la réflexion conventionnelle.
Pour surmonter cette limitation, nous pouvons utiliser la méthode getDeclaredMethod :
Method method = object.getClass().getDeclaredMethod(methodName); method.setAccessible(true); Object r = method.invoke(object);
La méthode getDeclaredMethod récupère un méthode quelle que soit sa visibilité. La méthode setAccessible nous permet de contourner la restriction d'accès privé et d'invoquer la méthode.
Attention :
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!