Я хочу вызвать метод main
, который является статическим. Я получил объект типа Class
, но я не могу создать экземпляр этого класса, а также не смог вызвать метод static
main
.
Вызов статического метода с использованием отражения
Ответ 1
// 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)
объекта метода.
Ответ 2
Из Javadoc метода. invvoke():
Если базовый метод статичен, то указанный аргумент obj игнорируется. Он может быть нулевым.
Что происходит, когда вы
Class klass = ...; Method m = klass.getDeclaredMethod(methodName, paramtypes); m.invoke(null, args)
Ответ 3
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;
}
}