获取已解析的 groovy 个脚本方法
Get parsed groovy script methods
我有这个 groovy 脚本:
GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");
如何从 script
中获取所有已声明函数的列表?
我已经试过 script.getMetaClass().getMetaMethods()
但 myStuff
功能未列出。
有两种方法可以调用您的方法:
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
2。您可以使用 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
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)
我有这个 groovy 脚本:
GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");
如何从 script
中获取所有已声明函数的列表?
我已经试过 script.getMetaClass().getMetaMethods()
但 myStuff
功能未列出。
有两种方法可以调用您的方法:
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
2。您可以使用 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
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)