0

我有一个这样的对象

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);
4

4 回答 4

3

是的,您可以使用反射。

myClass.getDeclaredMethod("main", String[].class).invoke(null, (Object)args);
于 2013-05-28T17:43:18.663 回答
3

来自反射 API 的 Java 教程

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();
    }
    }
}
于 2013-05-28T17:43:47.080 回答
3

这应该可以解决问题
(我假设这main是 1)公共(坦克getMethod会起作用)和 2)static,这就是为什么我null作为第一个参数传递invoke

myClass.getMethod("main", String[].class).invoke(null, (Object) params);
于 2013-05-28T17:47:42.060 回答
0

获取对主方法(myClass.getDeclaredMethod)的引用,然后调用该方法(Method.invoke)。如果您查看方法的 javadocs,细节应该很明显。

于 2013-05-28T17:44:28.667 回答