2

我正在尝试修改一些嵌入在 Java 中的 Javascript 代码,以将多个值返回给调用 Java 代码。

Java 代码(调用 Javascript):

...
Object result = execFunc.call(context, scope, scope, execArgs);
return ScriptRuntime.toString(result);

Javascript 代码(由 Java 调用):

...
return "string";

我希望返回多个值。

我尝试修改 Javascript 以返回 HashMap,如下所示:

...
var res = new java.util.HashMap();
res.put("String", "string");
res.put("Integer", 1);
return res;

但是当我在 Java 端进行转换时,我得到了一个 ClassCastException:

...
HashMap result = (HashMap) execFunc.call(context, scope, scope, execArgs);
return ScriptRuntime.toString(result);

结果是:

java.lang.ClassCastException: org.mozilla.javascript.NativeJavaObject cannot be cast to java.util.HashMap

我不喜欢在 HashMap 中返回它。我要返回的值是一个字符串和一个整数。理想情况下,我希望返回一个元组或一个 HashMap,但如果让它工作的唯一方法是返回一个数组中的两个字符串,然后解析出也可以的整数。

任何返回多个值的指导将不胜感激。

这是正确的方法吗,我应该注入一个可以在 Javascript 端填充的 Java 对象吗?

4

1 回答 1

1

尝试这个

NativeJavaObject njo = (NativeJavaObject) execFunc.call(context, scope, scope, execArgs);
Map map = (Map) njo.unwrap();
于 2013-07-31T03:18:14.243 回答