Dynamisches Aufrufen einer statischen Methode ohne Instanzreferenz (6. Juli 1999)

F: Wie kann ich eine statische Methode ohne Instanzreferenz dynamisch aufrufen? Method.invoke (Object obj, Object [] parms) benötigt eine konkrete Instanz, aber ich möchte die statische Methode direkt für ein Class-Objekt aufrufen! Ist das in Java möglich?

Die Problemumgehung besteht darin, eine Instanz dynamisch mit dieser Instanz zu erstellen newInstance()und invokemit dieser aufzurufen. Dies funktioniert jedoch nicht, wenn die Klasse keinen leeren Konstruktor hat. Und ich möchte keine Instanzen erstellen, die ich wirklich nicht brauche!

A: Gemäß der JDK-API-Dokumentation für Method.invoke(Object obj, Object[] args)"Wenn die zugrunde liegende Methode statisch ist, wird das angegebene objArgument ignoriert. Es kann null sein." Anstatt also ein tatsächliches Objekt zu übergeben, kann eine Null übergeben werden. Daher kann eine statische Methode ohne eine tatsächliche Instanz der Klasse aufgerufen werden.

Das folgende Beispielprogramm testet diese Tatsache und erzeugt die folgende Ausgabe korrekt. Eine konkrete Instanz der Klasse Foowird niemals erstellt.

import java.lang.reflect. *; public class Test {public statisch void main (String [] args) {try {Klasse c = Class.forName ("Foo"); System.out.println ("Geladene Klasse:" + c); Methode m = c.getDeclaredMethod ("getNum", null); System.out.println ("Got method:" + m); Objekt o = m.invoke (null, null); System.out.println ("Ausgabe:" + o); } catch (Ausnahme e) {e.printStackTrace (); }}} Klasse Foo {public static int getNum () {return 5; }}

Programmausgabe:

Geladene Klasse: Klasse Foo Got-Methode: public static int Foo.getNum () Ausgabe: 5 
Random Walk Computing ist die größte Java / CORBA-Beratungsboutique in New York und konzentriert sich auf Lösungen für Finanzunternehmen. Die Berater von Random Walk, die für ihre hochmoderne Java-Expertise bekannt sind, veröffentlichen und sprechen in einigen der angesehensten Foren der Welt über Java.

Diese Geschichte "Dynamisches Aufrufen einer statischen Methode ohne Instanzreferenz (6. Juli 1999)" wurde ursprünglich von JavaWorld veröffentlicht.