从Groovy调用Java类主方法时,避免参数数量不正确
从Groovy类方法中,我试图调用默认包中Java类的主函数(我知道不是最优的,但使用的是遗留代码)
我尝试使用Java反射教程中的修改版本:
Class<?> c = Class.forName(className)
Class[] argTypes = new Class[] { String[].class }
Method main = c.getDeclaredMethod("main", argTypes)
String[] mainArgs = Arrays.copyOfRange(args, 0, args.length)
main.invoke(null, mainArgs)
这会引发一个IllegalArgumentException,如下所示:
线程“main”java中出现异常。lang.IllegalArgumentException:参数数目错误
其他需要注意的事项:
argTypes[0]
是class [Ljava.lang.String
main
是public static void AClassName.main(java.lang.String[])
mainArgs
是java.lang.String[6]
Groovy和Java是否有不同的实现方法?否则,如何从默认包类调用main
# 1 楼答案
找到了。。。在默认包中给定此Java类
在这个问题的帮助下https://stackoverflow.com/a/22022402/6509
我们可以做到这一点(这是您的代码,稍微有点Groovized,根据另一个问题,在字符串[]周围有一个对象[]包装器):
当我们运行Groovy脚本时,我们得到了输出:
这适用于
Groovy Version: 3.0.8 JVM: 11.0.6 Vendor: Azul Systems, Inc. OS: Mac OS X
顺便说一句,以防您看到不同的:-)