Java如何调用脚本的特定功能?

此代码演示了如何使用Invocable接口来调用脚本的特定功能。使用Invocable.invokeFunction()带有或不带有参数的函数名称作为函数的参数。参数值可以作为传递varargs。

package org.nhooo.example.script;

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import javax.script.Invocable;

public class InvokingFunction {
    public static void main(String[] args) {
        String script =
            "function sayHello() {" +
                "   sayHello(null);" +
                "}" +
                " " +
                "function sayHello(name) {" +
                "   println('Hi there' + " +
                "       ((name == null) ? '!' : ' ' + name + '!'));" +
                "}";

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByExtension("js");

        try {
            engine.eval(script);

            // 将引擎转换/转换为可调用的引擎。
            Invocable invocableEngine = (Invocable) engine;

            // 调用不带参数的sayHello函数。
            invocableEngine.invokeFunction("sayHello");

            // 调用带有参数的sayHello函数。
            invocableEngine.invokeFunction("sayHello", "Jude");
        } catch (ScriptException | NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}