我正在使用 javax.scripting 和 Rhino 在这个项目中。
我有一个返回 Java 对象(Double、Long、 整数等)。我想从 javascript 调用该方法并且 将结果引用为 Javascript 原始类型。然而, javacript 将返回类型识别为对象。
如何强制它转换为 JavaScript 原语?
问题是我如何获得对上下文的引用并 包装工厂?
示例代码:
public class data
{
Double value = 1.0d;
public Number get() { return value; }
}
public static void main(String[] args)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName ("rhino");
data data = new data();
try
{
engine.eval("function test(data) { return data.getD('value1') + 5;};");
System.out.println("Result:" + ((Invocable)engine).invokeFunction("test", data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
输出: 结果:15
最佳答案
尝试以下操作
public static void main(String [] args) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName ("rhino");
data data = new data();
Context.enter().getWrapFactory().setJavaPrimitiveWrap(false);
try
{
engine.eval("function test(data) { return data.get('value1') + 5;};");
System.out.println("Result:" + ((Invocable)engine).invokeFunction("test", data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static class data
{
Double value = 1.0d;
public Number get(String arg) { return value; }
}
或者,您可以修改 JavaScript 函数以将值显式转换为数字:
function test(data) { return parseInt(data.get('value1'), 10) + 5;}
关于java - 犀牛 JavaScript : How to convert Object to a Javascript primitive?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1579777/