从类型为“Class <! - ? - >”的对象启动main方法

时间:2013-05-28 17:38:20

标签: java reflection main

我有一个这样的对象

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 个答案:

答案 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,细节应该是显而易见的。