静的なmain
メソッドを呼び出したい。タイプClass
のオブジェクトを取得しましたが、そのクラスのインスタンスを作成できず、static
メソッドmain
を呼び出すこともできません。
// 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)
を呼び出します。
Method.invoke()のJavadocから:
基になるメソッドが静的な場合、指定されたobj引数は無視されます。 nullの場合があります。
あなたはどうなりますか
クラスklass = ...; Method m = klass.getDeclaredMethod(methodName、paramtypes); m.invoke(null、args)
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;
}
}