Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java变量参数和rhino_Java_Arguments_Rhino - Fatal编程技术网

Java变量参数和rhino

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

我试图将我的所有Java方法都放在一个javascript脚本中

由于我想要“快捷方式”,我遵循以下指南:。但是,当我的Java方法具有可变参数时,我无法“公开”该方法以与javascript语言一起使用

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