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

Java中使用ScriptEngineManager定义变量解决ListNode构建ReferenceError问题

你遇到的报错是因为Java本地变量默认不会被ScriptEngine的执行上下文识别,需要手动将依赖的变量、类都注入到引擎上下文中才能正常执行,按以下步骤修改即可:

  1. 提前把ListNode类注入到引擎上下文,方便JS侧创建实例
  2. 每次执行eval前,把当前用到的finalNode、输入char数组、遍历下标都注入到引擎上下文

修改后的完整代码如下:

调整后的addTwoNumbersTo方法

public static ListNode addTwoNumbersTo(char[] finalDigitsToReverse) throws ScriptException {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("js");

    // 暴露ListNode类给JS引擎
    engine.put("ListNode", ListNode.class);

    int finalDigitsArrayLength = finalDigitsToReverse.length;
    ListNode finalNode = new ListNode();

    if (finalDigitsArrayLength > 0) {
        finalNode.val = Integer.parseInt(String.valueOf(finalDigitsToReverse[finalDigitsArrayLength - 1]));
        // 注入链表头节点到引擎上下文
        engine.put("finalNode", finalNode);

        int j = 1;
        for (int i = finalDigitsArrayLength - 2; i >= 0; i--) {
            // 注入当前遍历需要用到的数组和下标
            engine.put("finalDigitsToReverse", finalDigitsToReverse);
            engine.put("i", i);
            engine.eval(returnNumberOfNexts(j));
            j++;
        }
    }
    return finalNode;
}

returnNumberOfNexts方法无需修改,保持原有逻辑即可。
注:该方案依赖JDK8自带的Nashorn JS引擎,高版本JDK需要单独引入Nashorn依赖才能正常运行。动态脚本执行性能远低于常规指针遍历方案,仅作为思路验证使用。

内容的提问来源于stack exchange,提问作者Joe D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:39:03