我有这个时髦的剧本:
GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");
如何从script
获取所有已声明函数的列表?
我已尝试script.getMetaClass().getMetaMethods()
,但未列出myStuff
功能。
答案 0 :(得分:1)
有两种方法可以调用您的方法:
script.getMetaClass().getMethods()
public static void main(String[] args) {
GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");
script.getMetaClass()
.getMethods()
.stream()
.filter(it -> it.getName().equals("myStuff"))
.findAny()
.ifPresent(method -> {
final Object result = method.doMethodInvoke(script, new Object[]{3});
System.out.println("result = " + result);
});
}
输出:
result = 3
script.invokeMethod(String name, Object args)
public static void main(String[] args) {
GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");
System.out.println(script.invokeMethod("myStuff", 5));
}
输出:
5
答案 1 :(得分:1)
GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");
println script.getClass().getDeclaredMethods().find{it.name=='myStuff'}
输出:
public java.lang.Object Script1.myStuff(java.lang.Object)