我想公开一个
Java方法,以便可以通过任意脚本调用它.然后,脚本应该能够对返回值执行算术运算.
问题是虽然exposed方法返回Java Integer,但脚本实际上并没有获得常规数字,而是org.mozilla.javascript.NativeJavaObject的实例.
这是一些显示行为的简化测试代码:
public class RhinoTest { public static void main(String[] args) { String script = "foo.getBar() + 1"; Context context = Context.enter(); ScriptableObject scriptableObject = context.initStandardObjects(); ScriptableObject.putProperty(scriptableObject,"foo",new Foo()); Object result = context.evaluateString(scriptableObject,script,"FooBar",1,null); Context.exit(); System.out.println(result); } public static class Foo { public Integer getBar() { return 9; } } }
预期结果为10,但脚本返回91.
那么如何让脚本中的getBar()调用实际返回一个常规的Javascript数据类型呢?请注意,我不想通过添加unwrap()调用,parseint()等来更改脚本代码.
解决方法
修改上下文
WrapFactory:
context.getWrapFactory() .setJavaPrimitiveWrap(false);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。