不重复的问题
正如我向下说的那样,我已经检查了如何使用不同数量的参数在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方面假设我总是收到一个带有不同参数的数组,因为它可以从很多不同的地方调用,并且意味着要重新编码很多代码
答案 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);