如何在Java中以varargs的形式动态传递参数

如何在Java中以varargs的形式动态传递参数,java,arraylist,permutation,variadic-functions,Java,Arraylist,Permutation,Variadic Functions,我试图编写一个程序,从用户那里获取未知数量的数组作为输入,然后从中打印,我编写的函数print接受varargs 因此,我尝试在我的主方法调用print(arr1,arr2,arr3…中进行动态更改,这样我就不必设置可以传入多少数组的限制 我最初的想法是将所有数组存储在一个2d ArrayList中,然后将其解包,就像JavaScript使用spread操作符一样,您可以拥有一个2d数组,然后打印(…InputArray),但Java似乎不允许这样做。此方法: public void foo(S

我试图编写一个程序,从用户那里获取未知数量的数组作为输入,然后从中打印,我编写的函数print接受varargs

因此,我尝试在我的主方法调用
print(arr1,arr2,arr3…
中进行动态更改,这样我就不必设置可以传入多少数组的限制

我最初的想法是将所有数组存储在一个2d ArrayList中,然后将其解包,就像JavaScript使用spread操作符一样,您可以拥有一个2d数组,然后打印(…InputArray),但Java似乎不允许这样做。

此方法:

public void foo(String... args) {}
实际上与以下内容相同:

public void foo(String[] args) {}
真的-检查字节码,它是相同的签名。或者尝试将这两个方法放在一个类中—编译器不会允许您使用,因为它们具有相同的签名。
String…
String[]
之间的一个区别是
String…
的任何调用方都可以获得以下语法:获取在此位置传递的所有参数,并为它们创建一个数组

因此,调用varargs方法并传入数组效果良好:

public void foo(String... args) {
}

String[] a = new String[10];
foo(a); // compiles and runs fine.
问题是java中的数组相当笨拙,但varargs是基于它们的。避免它们是正确的,但是当尝试动态调用varargsed方法时,您不得不使用它们。更糟糕的是,泛型和数组也不能很好地混合。然而:

getPermutations(inputArrayList.toArray(ArrayList[]::new));
应该可以找到某个地方(这会将arraylist转换为数组)。

此方法:

public void foo(String... args) {}
实际上与以下内容相同:

public void foo(String[] args) {}
真的-检查字节码,它是相同的签名。或者尝试将这两个方法放在一个类中—编译器不会允许您使用,因为它们具有相同的签名。
String…
String[]
之间的一个区别是
String…
的任何调用方都可以获得以下语法:获取在此位置传递的所有参数,并为它们创建一个数组

因此,调用varargs方法并传入数组效果良好:

public void foo(String... args) {
}

String[] a = new String[10];
foo(a); // compiles and runs fine.
问题是java中的数组相当笨拙,但varargs是基于它们的。避免它们是正确的,但是当尝试动态调用varargsed方法时,您不得不使用它们。更糟糕的是,泛型和数组也不能很好地混合。然而:

getPermutations(inputArrayList.toArray(ArrayList[]::new));

应该可以让您找到什么地方(这会将arraylist转换为数组)。

这是有效的java代码。“java似乎不允许这样做”的问题是什么?当你说
arr1
时,你会列出ArrayList和PassList,是数组还是
ArrayList
?当调用带有可变参数的方法时,只需使用
getPermutations(inputList1,inputList2,inputListn)
getPermutations(inputListArray)
这是有效的java代码。“java似乎不允许这样做”的问题是什么?当你说
arr1
时,你会列出ArrayList和PassList,是数组还是
ArrayList
?当调用带有可变参数的方法时,只需使用
getPermutations(inputList1,inputList2,inputListn)
getPermutations(inputListArray)