本示例说明如何从脚本环境中修改Java对象。下面我们操作字符串数据的集合。为了将数据传递到脚本引擎,我们使用了键值绑定到脚本引擎。
package org.nhooo.example.script;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import java.util.List;
import java.util.ArrayList;
public class ModifiedJavaObjectFromScript {
public static void main(String[] args) {
// 创建五种颜色的数组
List<String> colors = new ArrayList<>();
colors.add("White");
colors.add("Black");
colors.add("Red");
colors.add("Green");
colors.add("Blue");
// 获取一个ScriptEngine实例。
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByExtension("js");
// 使用colorList键将颜色列表放入引擎中。
// 将列表设置到引擎中后,我们的脚本将是
// 能够阅读。
engine.put("colorList", colors);
try {
engine.eval(getScript());
// 重新显示颜色列表对象的修改后的版本。
for (String color : colors) {
System.out.println("Color = " + color);
}
} catch (ScriptException e) {
e.printStackTrace();
}
}
private static String getScript() {
// 下面是我们的脚本,用于读取以下内容的Java List的值:
//包含颜色字符串。我们还添加了其他颜色
// 到脚本环境中的列表对象。
return "var index; " +
"var colors = colorList.toArray(); " +
" " +
"for (index in colors) { " +
" println(colors[index]); " +
"}" +
" " +
"colorList.add(\"Yellow\"); " +
"colorList.add(\"Purple\"); " +
"colorList.add(\"Orange\"); ";
}
}上面的代码片段的输出是:
White Black Red Green Blue Color = White Color = Black Color = Red Color = Green Color = Blue Color = Yellow Color = Purple Color = Orange