【问题标题】:How to use java object in JavaScript engine in java8如何在java8的JavaScript引擎中使用java对象
【发布时间】:2018-07-30 10:39:14
【问题描述】:

我想在 javascript 引擎中使用 java 对象,但无法执行并获得异常:javax.script.ScriptException: :1:11 Expected ;但找到了

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Object map = engine.eval("var HashMap<String,String> = Java.type('java.util.HashMap<String,String>()');" +
                      "var map = new HashMap();" +
                      "map.put('key1', 'value1');" +
                      "map.put('key2', 'value2');" +
                      "map.put('key3', 'value3');" +
                      "map");
            System.out.println(map);

【问题讨论】:

    标签: java java-8 hashmap nashorn


    【解决方案1】:

    用这段代码试试,正常工作。

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    Object map = engine.eval("var HashMap = Java.type('java.util.HashMap');" +
                "var map = new HashMap();" +
                "map.put('key1', 'value1');" +
                "map.put('key2', 'value2');" +
                "map.put('key3', 'value3');" +
                "map");
    System.out.println(map);
    

    问题出在脚本的第一行:

    var HashMap<String,String> = Java.type('java.util.HashMap<String,String>()');
    

    而不是

    var HashMap = Java.type('java.util.HashMap');
    

    但您也可以将地图注入到您的脚本中,并像这样在脚本上对其进行操作:

    Map<String, String> map = new HashMap<>();
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.getContext().getBindings(ScriptContext.GLOBAL_SCOPE).put ("map", map);
    engine.eval("map.put('key1', 'value1');" +
                "map.put('key2', 'value2');" +
                "map.put('key3', 'value3');");
    System.out.println(map);
    

    【讨论】:

    • 所以意味着我不能这样定义 HashMap = Java.type('java.util.HashMap()');
    • 我更新了答案,目的是为您的问题提供另一种解决方案。但是如果你从脚本创建地图,我认为你不能指定类型。
    • 我已经确认,泛型的概念在 Javascript 中是未知的。所以new java.util.HashMap()其实和new HashMap()是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多