我想写一个程序,它将从用户那里接收一个未知数量的数组作为输入,然后从它们中打印,我写的函数print是以varargs为对象的。
所以我想做的是在我的主方法中调用 print(arr1, arr2, arr3...)
并动态地改变它,这样我就不必对可以传递多少个数组设置限制了。
我最初的想法是将所有的数组存储在一个2d ArrayList中,然后将它们解压,就像JavaScript的spread操作符一样,你可以拥有一个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));
应该会让你有所收获(这将数组列表转换为数组)。