首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将Rhino-JavaScript数组转换为Java-Arrays

如何将Rhino-JavaScript数组转换为Java-Arrays
EN

Stack Overflow用户
提问于 2009-09-16 14:36:55
回答 5查看 25.9K关注 0票数 18

我有以下几点:

代码语言:javascript
复制
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval("function getArray() {return [1,2,3,4,5];};");
Object result = jsEngine.eval("getArray();");

如何将类型为sun.org.mozilla.javascript.internal.NativeArray的结果对象转换为相应的java数组?有人能给我看一个工作代码示例吗?它应该适用于String和Integer数组。另外,如果知道在哪里寻找rhino引擎和java之间的其他数据类型转换,那就太好了。

顺便说一句,i know this page,但我真的是在寻找一个有效的代码样本。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-16 14:49:43

代码语言:javascript
复制
NativeArray arr = (NativeArray) result;
Object [] array = new Object[(int) arr.getLength()];
for (Object o : arr.getIds()) {
    int index = (Integer) o;
    array[index] = arr.get(index, null);
}
票数 24
EN

Stack Overflow用户

发布于 2013-12-06 00:09:26

我不确定第一次提出这个问题时是不是这样,但是NativeArray实现了java.util.List接口。因此,转换为真正的Java数组的简单方法是:

代码语言:javascript
复制
Object[] array = ((List<?>) result).toArray();
票数 9
EN

Stack Overflow用户

发布于 2009-09-16 14:47:58

如果Javascript在您的控制之下,您可以按照this document在那里进行转换。因此,为了适应您的示例,如下所示:

代码语言:javascript
复制
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
jsEngine.eval("function getArray() {return [1,2,3,4,5];};");
String convertFuncSrc =
     "function convertArray(type, arr) {"
   + "  var jArr = java.lang.reflect.Array.newInstance(type, arr.length);"
   + "  for (var i = 0; i < arr.length; i++) { "
   + "    jArr[i] = arr[i];"
   + "  }"
   + "  return jArr;"
   + "};";
jsEngine.eval(convertFuncSrc);
Object result = jsEngine.eval("convertArray(java.lang.Integer.TYPE, getArray());");
int[] javaArray = (int[])result;

但是,如果您不能更改Javascript,则此方法将不起作用,并且您i将/i有一个sun.org.mozilla.javascript.internal.NativeArray实例作为您的result变量。在这一点上,我认为您只需要使用它公开的任何公共方法,直接转换和处理它;它可能并不美观,但我看不到任何其他选择。特别是,我认为在良好的Rhino级别上唯一可以保证的是它将是Scriptable (可能是ScriptableObject)的一个实例,这并不能帮助您将其用作数组。

在这里,Kevin's answer看起来是一个很好的方法(并且类似于我刚刚要在!:-)中编辑的内容)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1433382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档