gpt4 book ai didi

java - 在 Java Nashorn 中访问对象变量

转载 作者:行者123 更新时间:2023-11-29 16:10:20 25 4
gpt4 key购买 nike

我的脚本中有一个对象,它包含字段和方法。我可以使用 invokeMethod() 调用 Java 中的方法,但似乎无法获取对象字段的内容。我有这段 JavaScript 代码:

var Test = { 
TestVar: "SomeTest",

TestFunc: function() {
print("Hello");
}
};

在这个 Java 类中:

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class ScriptTest {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

try {
engine.eval("var Test = { TestVar: \"SomeTest\", TestFunc: function() { print(\"Hello\");}};");
} catch (ScriptException e) {
e.printStackTrace();
System.exit(1);
}

System.out.println(engine.get("Test"));
System.out.println(engine.get("Test.TestVar"));
System.out.println(engine.get("Test[TestVar]"));
System.out.println(engine.get("Test[\"TestVar\"]"));

Invocable inv = (Invocable) engine;

try {
inv.invokeMethod(engine.get("Test"), "TestFunc");
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (ScriptException e) {
e.printStackTrace();
}
}
}

这给了我输出

[object Object]
null
null
null
Hello

有什么方法可以直接访问 TestVar 变量吗?

最佳答案

或者:

engine.eval("Test.TestVar");

((JSObject)engine.get("Test")).getMember("TestVar");

应该可以。

关于java - 在 Java Nashorn 中访问对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30328953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com