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

2022-09-01 19:58:49

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

必须使用反射,以便消除被调用的主类的编译时依赖性。直接的方法不会屈服,因为它只识别“公共”和“非静态”方法。建议?


答案 1

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

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
}

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


答案 2
Method mainMethod = clazz.getDeclaredMethod("main", String[].class);
final Object[] args = new Object[1];
args[0] = new String[]{"1", "2"};
mainMethod.invoke(null, args);