如何从脚本访问Java对象?

此示例演示如何从脚本访问Java对象。我们通过调用ScriptEngine的put(String key, Object value)方法将Java对象放入脚本引擎中。以后我们的脚本可以读取或访问此值。例如,我们传递一个字符串数组和一个日期对象供脚本显示。

package org.nhooo.example.script;

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import java.util.Date;

public class AccessJavaObjectFromScript {
    public static void main(String[] args) {
        // 创建五种颜色的数组
        String[] colors = {"White", "Black", "Red", "Green", "Blue"};
        Date now = new Date();

        // 下面是我们的脚本,用于读取以下内容的Java数组的值:
        // 包含颜色字符串。
        String script =
                "var index; " +
                "var colors = colorArray; " +
                " " +
                "for (index in colors) { " +
                "    println(colors[index]); " +
                "}" +
                "println('----------'); " +
                "println('Today is ' + date); ";

        // 获取一个ScriptEngine实例。
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByExtension("js");

        // 使用colorArray键将颜色数组放入引擎中。
        // 将数组设置为引擎后,我们的脚本将是
        // 能够读取它。
        engine.put("colorArray", colors);
        engine.put("date", now);

        try {
            engine.eval(script);
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

我们的代码将打印如下:

White
Black
Red
Green
Blue
----------
Today is Fri Dec 21 23:03:39 WITA 2018