在 Java Nashorn 中访问对象变量
Access object variable in Java Nashorn
我的脚本中有一个对象,它包含字段和方法。我可以用 invokeMethod()
调用 Java 中的方法,但似乎无法获取对象字段的内容。我有这个 Java脚本代码:
var Test = {
TestVar: "SomeTest",
TestFunc: function() {
print("Hello");
}
};
在此JavaClass:
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");
应该可以。
我的脚本中有一个对象,它包含字段和方法。我可以用 invokeMethod()
调用 Java 中的方法,但似乎无法获取对象字段的内容。我有这个 Java脚本代码:
var Test = {
TestVar: "SomeTest",
TestFunc: function() {
print("Hello");
}
};
在此JavaClass:
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");
应该可以。