Heim >Java >javaLernprogramm >Wie können Sie private Methoden mithilfe von Reflection in Java aufrufen?

Wie können Sie private Methoden mithilfe von Reflection in Java aufrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-22 07:52:18866Durchsuche

How Can You Invoke Private Methods Using Reflection in Java?

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:

  • getDeclaredMethod findet nur Methoden, die in der aktuellen Klasse deklariert sind. Für geerbte Methoden müssen Sie möglicherweise die Klassenhierarchie durchlaufen.
  • Einige SecurityManager verbieten möglicherweise die Verwendung von setAccessible. Erwägen Sie die Ausführung des Aufrufs als PrivilegedAction mit AccessController oder Subject.

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!

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