【问题标题】:Bindings HashMap with java ScriptEngine使用 java ScriptEngine 绑定 HashMap
【发布时间】:2013-10-30 11:55:57
【问题描述】:

我正在尝试根据自己的需要测试 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 运行时吗?所以我可以看到那里发生了什么。

【问题讨论】:

    标签: java javascript scriptengine


    【解决方案1】:

    我通过从其他示例中认识到评估字符串中的语法应该是 Java 应用程序的语法来设法解决这个问题,因此,作为映射,我做到了:

    map.get('Source').get('service')
    

    第一个 .get() 返回 map Source 键的值,然后第二个 .get() 返回 service 的值。 我真的很想知道这种评估过程的表现如何。 另外,是否可以调试呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-09
      • 2010-11-07
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多