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

Java使用ScriptEngine执行字符串代码时如何传入自定义变量

报错原因

ScriptEngine的执行上下文和当前Java代码的上下文相互独立,Java代码中定义的finalNode、newlyCreatedNode变量默认不会被脚本引擎识别,需要手动将Java对象注入到ScriptEngine的上下文中。

修复方案

在调用engine.eval(codeToExecute)之前,添加两行代码将变量注入脚本引擎即可:

// create a new list node
ListNode newlyCreatedNode = new ListNode(arrayToReverse[i]);
// calculate how many 'nexts' I need
String codeToExecute = returnNumberOfNexts(j);
// 注入Java变量到脚本引擎上下文
engine.put("finalNode", finalNode);
engine.put("newlyCreatedNode", newlyCreatedNode);
// set the next field with the list node I just created
engine.eval(codeToExecute);

更优的实现方案

你的需求完全不需要引入ScriptEngine,动态拼接脚本执行的方式不仅性能差,还存在额外的异常风险,常规的链表构建逻辑如下即可实现同等效果:

public static ListNode reverseAndLinkToListNode(int [] arrayToReverse) {
    if (arrayToReverse == null || arrayToReverse.length == 0) {
        return null;
    }
    // 头节点取数组最后一位,对应反转后的第一个元素
    ListNode head = new ListNode(arrayToReverse[arrayToReverse.length - 1]);
    ListNode current = head;
    // 从数组倒数第二位向前遍历构建链表
    for (int i = arrayToReverse.length - 2; i >= 0; i--) {
        current.next = new ListNode(arrayToReverse[i]);
        current = current.next;
    }
    return head;
}

内容的提问来源于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.03 04:45:04