如何在java

时间:2017-02-28 08:52:57

标签: javascript java arrays nashorn

不重复的问题

正如我向下说的那样,我已经检查了如何使用不同数量的参数在java中工作。它将它们包装成一个数组,然后继续它。但是我需要将不同数量的参数传递给函数而不是数组,因为它将被javascript处理

我正在使用 Nashorn 来执行java中的一些javascript脚本。 我试图尽可能地模块化代码,以便易于使用。

我有以下函数来调用javascript方法:

MyClass{
....
    public static Object call(ScriptObjectMirror ctx, String functionName, Object ...args ) {
        ScriptObjectMirror caller = ctxs.get(ctx); // assume this works, it brings correct data
        return caller.call(ctx, functionName, args);
    }
....
}

所以,我读过Can I pass an array as arguments to a method with variable arguments in Java?

等不同的问题

它明确指出Object ...与Object []相同。

然而,当我在javascript方面工作时,我会收到不同的东西,具体取决于args:

让我说我做以下电话:

MyClass.call(myCtx, "a", true, false);

它会打电话:

caller.call(myCtx, "a", [true, false]); //Javascript prints: [Ljava.lang.Object;@273d3dbb

但是,如果我跳过方法MyClass.call以便直接调用这样的javascript函数:

caller.call(myCtx, "a", true, false); //Javascript prints true, false

THEREFOR

我可以理解java内部工作正常(Object ...和Object []) BUT ,因为我使用的是Nashorn,我真的需要能够得到args,然后拆分它们

类似的东西:

public static Object call(ScriptObjectMirror ctx, String functionName, Object ...args ) {
    //Pseudocode of what I want to achieve
    for (arg: args) {
        arg1 = arg;
        arg2 = arg;
        argN = arg;
    }
    return caller.call(ctx, functionName, arg1, arg2, ..., argN);

}

有没有办法实现这个目标? /任何解决方法?

注意

我不能只是在javascript方面假设我总是收到一个带有不同参数的数组,因为它可以从很多不同的地方调用,并且意味着要重新编码很多代码

1 个答案:

答案 0 :(得分:1)

你无法做到Java可以做的事情,但你可以做类似的事情。

Javascript函数支持接收无限数量的参数。您可以按arguments关键字访问参数。

请阅读this

例如:

function foo(){
    for(var i=0; i<arguments.length; i++){
  	    document.write(arguments[i] +'<br />');
    }
}

foo("A", "B", "C", 1, 2, 3);