我需要使用反射从另一个主方法调用Java类的main方法。
必须使用反射才能删除被调用的主类的编译时依赖性。 直接的方法不会产生,因为它只识别'公共'和'非静态'方法。 建议?
答案 0 :(得分:48)
不应该比调用任何其他函数更复杂:
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
}
但是我真的没有看到很多用途,它唯一能给你买的就是只要你从不使用那个特定的代码路径就可以编译程序而不需要连接另一个程序,但如果这就是你需要的,我们走了;)
答案 1 :(得分:1)
如果你有两个都有主方法的java文件,你不能把它们编译成不同的项目并从另一个项目调用吗?
答案 2 :(得分:0)
Method mainMethod = clazz.getDeclaredMethod("main", String[].class);
final Object[] args = new Object[1];
args[0] = new String[]{"1", "2"};
mainMethod.invoke(null, args);