为了账号安全,请及时绑定邮箱和手机立即绑定

java ScriptEngine 在数组方法上失败

java ScriptEngine 在数组方法上失败

HUH函数 2023-04-19 15:41:42
我在 Java ScriptEngine 中执行一组 JavaScript 方法时遇到问题。我使用 JDK 8。例子@Testpublic void arrayMethod() throws Exception {    ScriptEngine engine;    engine = new ScriptEngineManager().getEngineByName("JavaScript");    String script = "function f1() { return [\"string2\",\"string3\"].some(item => o1==item); }";    engine.eval(script);    engine.put("o1", "string1");    Boolean result =  (Boolean) (((Invocable) engine).invokeFunction("f1"));    LOG.info(result.toString());}结果java.lang.AssertionError:为 :1 生成字节码失败at jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(CompilationPhase.java:431)at jdk.nashorn.internal.codegen.CompilationPhase.apply(CompilationPhase.java:624)at jdk.nashorn.internal.codegen.Compiler.compile(Compiler.java:655)我尝试使用其他方法(每种方法等)得到相同的结果。没有语法错误,但 java 脚本编译器无法创建代码。我的 ScriptEngine 版本没有包含数组的方法。它返回语法错误。如何在 ScriptEngine 中使用数组?
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您正在使用 ES6 引入的箭头函数。JDK8 Nashorn 不支持 ES6,只支持 ES5.1。将您的箭头函数转换为标准函数,它将运行:

String script = "function f1() { return [\"string2\",\"string3\"].some(function(item){return o1==item;})}";



查看完整回答
反对 回复 2023-04-19
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

我使用 JDK 8。

对于您的脚本,您至少需要 JDK 9,因为有一个箭头函数,它仅从 Java 9 开始受支持。


查看完整回答
反对 回复 2023-04-19
  • 2 回答
  • 0 关注
  • 174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信