获取解析的groovy脚本方法

时间:2018-01-26 10:18:17

标签: groovy groovyshell

我有这个时髦的剧本:

GroovyShell shell = new GroovyShell();
Script script = shell.parse("def myStuff(a){ return a }");

如何从script获取所有已声明函数的列表?

我已尝试script.getMetaClass().getMetaMethods(),但未列出myStuff功能。

2 个答案:

答案 0 :(得分:1)

有两种方法可以调用您的方法:

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

答案 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)