本示例说明如何从脚本环境中修改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