提问者:小点点

如何在Java中动态传递变量


我正在尝试编写一个程序,它将从用户输入未知数量的数组,然后从它们中打印,我编写的print在varargs中获取的函数。

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

我最初的想法是将所有数组存储在一个2D ArrayList中,然后将它们解包,就像JavaScript中的扩展运算符一样,您可以拥有一个2D数组,然后执行print(...InputArrays),但Java似乎不允许这样做。


共1个答案

匿名用户

此方法:

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转换为数组)。