Вызов статического метода с использованием отражения - PullRequest
176 голосов
/ 18 марта 2010

Я хочу вызвать метод main, который является статическим. Я получил объект типа Class, но не могу создать экземпляр этого класса и также не могу вызвать метод static main.

Ответы [ 3 ]

256 голосов
/ 18 марта 2010
// 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");

Если метод частный, используйте getDeclaredMethod() вместо getMethod(). И вызовите setAccessible(true) для объекта метода.

41 голосов
/ 18 марта 2010

Из Javadoc Method.invoke ():

Если базовый метод является статическим, то указанный аргумент obj игнорируется. Это может быть ноль.

Что происходит, когда вы

Class klass = ...;
Method m = klass.getDeclaredMethod(methodName, paramtypes);
m.invoke(null, args)
9 голосов
/ 18 марта 2010
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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...