如何在Java中动态传递参数为varargs?

问题描述 投票:-1回答:1

我想写一个程序,它将从用户那里接收一个未知数量的数组作为输入,然后从它们中打印,我写的函数print是以varargs为对象的。

所以我想做的是在我的主方法中调用 print(arr1, arr2, arr3...) 并动态地改变它,这样我就不必对可以传递多少个数组设置限制了。

我最初的想法是将所有的数组存储在一个2d ArrayList中,然后将它们解压,就像JavaScript的spread操作符一样,你可以拥有一个2d数组,然后进行 print(...inputArrays)但似乎Java不允许这样做。

java arraylist permutation variadic-functions
1个回答
2
投票

这个方法。

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));

应该会让你有所收获(这将数组列表转换为数组)。

© www.soinside.com 2019 - 2024. All rights reserved.