我正在尝试编写一个程序,它将从用户输入未知数量的数组,然后从它们中打印,我编写的print在varargs中获取的函数。
所以我要做的是在我的主方法中调用print(arr1,arr2,arr3...)
,并动态更改它,这样我就不必对可以传入多少个数组设置限制。
我最初的想法是将所有数组存储在一个2D ArrayList中,然后将它们解包,就像JavaScript中的扩展运算符一样,您可以拥有一个2D数组,然后执行print(...InputArrays)
,但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转换为数组)。