Nashorn给出了Array.from(string)的错误

时间:2018-03-25 17:57:23

标签: javascript java arrays nashorn

我有一个javascript文件fun.js

function fun1(){
    var str='apple';
    var charArray = Array.from(str);
    return charArray;
}

我使用nashorn将此charArray返回到我的java代码。但是nashorn给出了例外 -

javax.script.ScriptException:TypeError:Array.from不是第25行的函数

如何在nashorn中使用Array.from(),或者有什么方法可以将字符串转换为与nashorn兼容的js中的charArray。

我的java代码是 -

    System.out.println("intialising parser....");

    ScriptEngine engine= new ScriptEngineManager().getEngineByName("nashorn");

    engine.eval(new FileReader("index.js"));
    Invocable invocable= (Invocable) engine;

    Object obj = (Object)invocable.invokeFunction("fun1");

2 个答案:

答案 0 :(得分:1)

有,String.toCharArray(),因为Nashorn允许您使用Java方法。所以你可以做到,

System.out.println("initializing parser....");
String js = "function fun1() { return 'apple'.toCharArray() }";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
try {
    engine.eval(js);
    Invocable invocable = (Invocable) engine;

    Object obj = (Object) invocable.invokeFunction("fun1");
    System.out.println(Arrays.toString((char[]) obj));
} catch (Exception e) {
    e.printStackTrace();
}

那个输出

initializing parser....
[a, p, p, l, e]

答案 1 :(得分:0)

后来我发现它很简单 -

 foreach (product in product2List)
{
product.ProductId = NameBox.Text;
Db_Helper.UpdateProduct2Details(product);

它也与nashorn兼容。