231 votes

l'invocation d'une méthode statique à l'aide de la réflexion

Dans mon projet, je voudrais invoquer la méthode principale qui est statique. J'ai eu l'objet de type Class, mais je ne suis pas en mesure de créer une instance de cette classe, et aussi de ne pas pouvoir invoquer l' static méthode main.

335voto

Adeel Ansari Points 24434
// 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");

Dans le cas où la méthode est l'usage privé getDeclaredMethod() au lieu de getMethod(). Et appelez - setAccessible(true) sur la méthode de l'objet.

54voto

atk Points 5061

L'Javadoc de la Méthode.invoke():

Si le sous-jacent de la méthode est statique, la spécifié obj argument est ignoré. Il peut être null.

Ce qui se passe quand vous

Classe klass = ...;
Méthode m = klass.getDeclaredMethod(methodName, paramtypes);
m.invoke(null, args)

15voto

Frostman Points 166
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;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X