You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java8 Nashorn引擎调用eval执行加法运算报错如何解决?

Nashorn引擎变量传递加法实现方案

报错本质是Nashorn引擎的执行上下文与Java代码上下文相互隔离,默认无法直接读取Java侧定义的局部变量,可通过以下两种方案实现需求:

方案1:直接拼接变量值到脚本字符串

适合简单数值计算场景,无需额外处理上下文:

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("nashorn");
Integer sum = 20;
Integer var2 = 30;
try {
    // 将Java变量的值直接拼接为脚本表达式字符串
    sum = (Integer) engine.eval(sum + "+" + var2);
} catch (Exception e) {
    System.out.println("Error executing script: " + e.getMessage());
}

方案2:通过Bindings注入变量到引擎上下文

更规范的通用方案,支持字符串、自定义对象等复杂类型变量传递,可避免脚本注入风险:

import javax.script.Bindings;
// 其余引用保持和原有代码一致

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("nashorn");
Integer sum = 20;
Integer var2 = 30;
try {
    // 创建绑定对象,将Java变量注入到脚本执行上下文
    Bindings bindings = engine.createBindings();
    bindings.put("sum", sum);
    bindings.put("var2", var2);
    // 执行脚本时传入绑定对象,引擎即可直接识别对应变量名
    sum = (Integer) engine.eval("sum + var2", bindings);
} catch (Exception e) {
    System.out.println("Error executing script: " + e.getMessage());
}

两种方案执行后都可以得到sum=50的正确结果。


内容的提问来源于stack exchange,提问作者Antony Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 23:54:03