gpt4 book ai didi

java - 犀牛Javascript : How to convert Object to a Javascript primitive?

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

我在 Rhino 中使用 javax.scripting在这个项目中。

我有一个 Java 方法返回一个 Java 对象 (Double, Long,整数等)。我想从 javascript 调用该方法将结果引用为 Javascript 原始类型。然而,javacript 将返回类型识别为对象。

我如何强制它转换为 javascript 原语?

这个问题与 http://groups.google.com/group/mozilla.dev.tech.js-engine.rhino/browse_thread/thread/2f3d43bb49d5288a/dde79e1aa72e1301

问题是我如何获得对上下文的引用以及包装工厂?

示例代码:

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/

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