编程语言
首页 > 编程语言> > Rhino Javascript:如何将Object转换为Javascript原语?

Rhino Javascript:如何将Object转换为Javascript原语?

作者:互联网

我正在使用与Rhino的javax.scripting
在这个项目中.

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

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

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

问题是我如何获得对上下文的引用
WrapFactory?

示例代码:

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;}

标签:rhino,javascript,java
来源: https://codeday.me/bug/20191008/1872303.html