Java使用反射调用类的main()方法

ano*_*984 17 java reflection

我需要使用反射从另一个主方法调用Java类的main方法.

必须使用反射才能删除被调用的主类的编译时依赖性.直接的方法不会产生,因为它只识别'公共'和'非静态'方法.建议?

Voo*_*Voo 52

不应该比调用任何其他函数更复杂:

public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    Class<?> cls = Class.forName("pkg1.pkg2.classname");
    Method meth = cls.getMethod("main", String[].class);
    String[] params = null; // init params accordingly
    meth.invoke(null, (Object) params); // static method doesn't have an instance
}
Run Code Online (Sandbox Code Playgroud)

但我真的没有看到很多用途,它唯一能给你买的就是你只要你从不使用那个特定的代码路径就可以编译程序而不需要连接另一个程序,但是如果这就是你需要的,那么我们走 ;)

  • @Bagira`invoke`需要一个`Object []`(`Object ...`只是语法),包含该方法的所有参数.我们只想将一个参数传递给字符串数组.问题是java中的数组是协变的(即`String [] p; Object [] o = p`将编译没有任何问题),因此如果我们只传递一个被解释为对象数组的字符串数组,那么该方法认为你传递了几个字符串而不是一个字符串数组. (2认同)
  • 给所有人的重要提示:在此答案中要注意的关键是对对象的参数转换!这是必不可少的!请参阅上面的评论。 (2认同)