it-swarm.com.de

Aufrufen einer statischen Methode mithilfe von Reflection

Ich möchte die Methode main aufrufen, die statisch ist. Ich habe das Objekt vom Typ Class erhalten, kann jedoch keine Instanz dieser Klasse erstellen und auch die Methode staticmain nicht aufrufen.

178
Steven
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");

Wenn es sich bei der Methode um eine private Verwendung handelt, wird getDeclaredMethod() anstelle von getMethod() verwendet. Und rufen Sie setAccessible(true) für das Methodenobjekt auf.

263
Adeel Ansari

Aus dem Javadoc von Method.invoke ():

Wenn die zugrunde liegende Methode statisch ist, wird das angegebene obj-Argument ignoriert. Es kann null sein.

Was passiert wenn du

 Klasse klass = ...; 
 Methode m = klass.getDeclaredMethod (methodName, paramtypes); 
 M.invoke (null, args) 
43
atk
String methodName= "...";
String[] args = {};

Method[] methods = clazz.getMethods();
for (Method m : methods) {
    if (methodName.equals(m.getName())) {
        // for static methods we can use null as instance of class
        m.invoke(null, new Object[] {args});
        break;
    }
}
10
Frostman