我有一个这样的对象
Class<?> myClass = getMyClass();
// don't ask about getMyClass() method, it's not important,
just be sure that this method returns a class.
其次,我确信“myClass”包含“main(String args [])”方法。
如何启动此主要方法。我想我应该使用java.lang.reflect,但我不知道如何。
我想要的只是做这样的事情。
String params[] = {"arg1", "arg2"};
cl.main(params);
答案 0 :(得分:3)
是的,你可以使用反射。
myClass.getDeclaredMethod("main", String[].class).invoke(null, (Object)args);
答案 1 :(得分:3)
来自Java tutorial on the reflection API:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
public class InvokeMain {
public static void main(String... args) {
try {
Class<?> c = Class.forName(args[0]);
Class[] argTypes = new Class[] { String[].class };
Method main = c.getDeclaredMethod("main", argTypes);
String[] mainArgs = Arrays.copyOfRange(args, 1, args.length);
System.out.format("invoking %s.main()%n", c.getName());
main.invoke(null, (Object)mainArgs);
// production code should handle these exceptions more gracefully
} catch (ClassNotFoundException x) {
x.printStackTrace();
} catch (NoSuchMethodException x) {
x.printStackTrace();
} catch (IllegalAccessException x) {
x.printStackTrace();
} catch (InvocationTargetException x) {
x.printStackTrace();
}
}
}
答案 2 :(得分:3)
这应该可以解决问题
(我假设main
是1)公共(坦克到getMethod
将起作用)和2)static
,这就是我通过null
的原因}作为invoke
)
myClass.getMethod("main", String[].class).invoke(null, (Object) params);
答案 3 :(得分:0)
获取对main方法的引用(myClass.getDeclaredMethod),然后调用方法(Method.invoke)。如果你看一下方法的javadocs,细节应该是显而易见的。