Privater Methodenaufruf durch Reflexion
In Java ist der direkte Reflexionsaufruf privater Methoden nicht zulässig. Es gibt jedoch alternative Ansätze, um diese Funktionalität zu erreichen.
Stellen Sie sich das folgende Szenario vor, in dem eine Methode, die ursprünglich als privat definiert wurde, durch Reflektion aufgerufen werden muss:
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);
Dieser Code versucht dies Erhalten Sie einen Verweis auf die private Methode, die durch das Attribut „methodName“ angegeben wird. Dieser Ansatz löst jedoch eine „NoSuchMethodException“ aus, da auf private Methoden über herkömmliche Reflektion nicht zugegriffen werden kann.
Um diese Einschränkung zu überwinden, können wir die getDeclaredMethod-Methode verwenden:
Method method = object.getClass().getDeclaredMethod(methodName); method.setAccessible(true); Object r = method.invoke(object);
Die getDeclaredMethod-Methode ruft a ab Methode unabhängig von ihrer Sichtbarkeit. Mit der setAccessible-Methode können wir die private Zugriffsbeschränkung umgehen und die Methode aufrufen.
Vorsichtsmaßnahmen:
Das obige ist der detaillierte Inhalt vonWie können Sie private Methoden mithilfe von Reflection in Java aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!