Вызов статического метода с помощью отражения

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

184
задан Adeel Ansari 27 June 2018 в 01:36
поделиться

3 ответа

// 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) для объекта метода.

271
ответ дан 23 November 2019 в 05:57
поделиться

Из документации Javadoc для Method.invoke ():

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

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

Class klass = ...;
Method m = klass.getDeclaredMethod(methodName, paramtypes);
m.invoke(null, args)
44
ответ дан 23 November 2019 в 05:57
поделиться
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
ответ дан 23 November 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: