Java变量参数和rhino
我试图将我的所有Java方法都放在一个javascript脚本中 由于我想要“快捷方式”,我遵循以下指南:。但是,当我的Java方法具有可变参数时,我无法“公开”该方法以与javascript语言一起使用Java变量参数和rhino,java,arguments,rhino,Java,Arguments,Rhino,我试图将我的所有Java方法都放在一个javascript脚本中 由于我想要“快捷方式”,我遵循以下指南:。但是,当我的Java方法具有可变参数时,我无法“公开”该方法以与javascript语言一起使用 public void printf(String format, Object... args) { out.printf(format, args); } //Gives org.mozilla.javascript.EvaluatorException: Unsupported
public void printf(String format, Object... args) {
out.printf(format, args);
}
//Gives org.mozilla.javascript.EvaluatorException: Unsupported parameter type "[Ljava.lang.Object;" in method printf
其他事项:
如果我试图仅使用“javascript”创建一个“到printf
的快捷方式”:
如果我键入任何内容,就会得到org.mozilla.javascript。Arguments@NNNNNN
。如何解决这个问题
多谢各位
更新
由于没有找到任何解决方案,我改变了方法:现在我只是使用ScriptEngine。实际上,我所做的是公开整个对象(不仅仅是函数)。不幸的是,每次我需要调用函数时,我都需要在它前面加上我公开的对象的名称
无论如何,有了它,我可以创建带有可变参数的Java方法,并在JavaScript端使用它们,而无需任何修改。我遇到了同样的问题。从那时起,他们更新了关于FunctionObject可能是什么的文档。它只需要一小部分数据。我的解决方案如下:
@JSFunction
public void log(Object messages) {
if(messages instanceof List) {
console.log(((List)messages).toArray());
}
else if (messages instanceof Object[]) {
console.log(((Object[])messages));
}
else {
console.log(new Object[]{messages});
}
}
我想让它打印出一个对象数组,而不是一个对象,然后在运行时使用反射来判断它是列表、数组还是单个对象,并提供适当的处理
@JSFunction
public void log(Object messages) {
if(messages instanceof List) {
console.log(((List)messages).toArray());
}
else if (messages instanceof Object[]) {
console.log(((Object[])messages));
}
else {
console.log(new Object[]{messages});
}
}