我正在尝试根据自己的需要测试ScriptEngine。 在我的Java程序中,我有一个变量:
HashMap<String,HashMap<String,String[]>> mymap = new HashMap<String,HashMap<String,String[]>>();
例如,它包含{Source, {service = ["TCP"]}}
现在,我希望能够将此映射传递给ScriptEngine,以便在阅读地图内容时评估表达式。
我试着做以下事情:
HashMap<String,String[]> Source = new HashMap<String,String[]>();
Source.put("service", new String[]{"TCP"});
mymap.put("Source", Source);
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
Bindings bindings = new SimpleBindings();
bindings.put("map", mymap);
String exp = "println(\"Hello from inside scripting!\");"
+ "println(\"map = \" + map)";
engine.eval(exp,bindings);
然而它不起作用。我明白了:
Hello from inside scripting!
mymap = {Source={service=[Ljava.lang.String;@4e2e29c}}
我尝试了两个map.Source or map['Source']
但他们都没有工作。
我如何让它工作?这样字符串就可以通过并评估它?
更重要的是,既然它可以解决我的任何问题,我可以调试javascript运行时吗?所以我可以看到那里发生了什么。
答案 0 :(得分:0)
我设法通过从其他示例中了解到,评估字符串中的语法应该是Java应用程序的语法,因此,作为地图,我做了:
map.get('Source').get('service')
第一个.get()返回映射Source键的值,然后第二个.get()返回service的值。 我真的很想知道这种评估过程的表现是什么。 而且,如果它可以调试它?