Heim  >  Artikel  >  Java  >  Wie kann ich trotz Zugriffsbeschränkungen private Methoden mithilfe von Reflection in Java aufrufen?

Wie kann ich trotz Zugriffsbeschränkungen private Methoden mithilfe von Reflection in Java aufrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-08 22:22:02484Durchsuche

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

Nutzung von Reflection zum Aufrufen privater Methoden

Trotz Javas Einschränkung beim Zugriff auf private Methoden durch Reflection gibt es eine Lösung, um diese Einschränkung zu überwinden. Um eine private Methode über Reflektion aufzurufen, kann man den folgenden Ansatz nutzen:

Erstens erhalten Sie die private Methode mit getDeclaredMethod(String methodName) anstelle von getMethod(String methodName). Diese Methode ermöglicht den Zugriff auf öffentliche und private Methoden, die innerhalb der aktuellen Klasse deklariert sind.

Um dann die Standardzugriffsbeschränkung für private Methoden zu umgehen, verwenden Sie die Methode setAccessible(boolean accessable), um den Zugriff zu gewähren. Indem Sie „accessible“ auf „true“ setzen, überschreiben Sie die Schutzeinstellungen und erlauben den Aufruf der privaten Methode.

Rufen Sie abschließend die private Methode mit invoke(Object object, Object... args) mit dem gewünschten Objekt und allen erforderlichen auf Argumente.

Hier ist eine aktualisierte Version des in der ursprünglichen Frage bereitgestellten Codes:

Method method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);

Vorbehalte:

  • getDeclaredMethod schränkt den Zugriff ein auf Methoden, die innerhalb der aktuellen Klasse deklariert sind, nicht auf geerbte Methoden. Geerbte Methoden erfordern das Durchlaufen der konkreten Klassenhierarchie.
  • SecurityManager kann möglicherweise die Verwendung von setAccessible verhindern. Erwägen Sie in solchen Fällen die Ausführung des Codes als PrivilegedAction unter Verwendung von AccessController oder Subject.

Das obige ist der detaillierte Inhalt vonWie kann ich trotz Zugriffsbeschränkungen 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