繁体   English   中英

如何在 Java 中将 arguments 作为可变参数动态传递

[英]How to dynamically pass arguments as varargs in Java

我正在尝试编写一个程序,它将未知数量的 arrays 作为用户的输入,然后从他们那里打印,我写的 function 使用可变参数。

所以我要做的是在我的主要方法调用print(arr1, arr2, arr3...)并动态更改它,因此我不必限制可以传入多少 arrays。

我最初的想法是将所有 arrays 存储在 2d ArrayList 中,然后解压它们,就像 JavaScript 有扩展运算符,然后你可以输入数组并print(...inputArrays)似乎 Java 允许这样做。

这种方法:

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

实际上与以下内容相同:

public void foo(String[] args) {}

真的 - 检查字节码,它是相同的签名。 或者尝试在一个 class 中使用这两种方法 - 编译器不会让你这样做,因为它们具有相同的签名。 String...String[]之间的一个区别是,任何对String...调用者都会获得以下语法糖:获取在此 position 中传递的所有 arguments 并为它们创建一个数组。

因此,调用 varargs 方法并传入数组可以正常工作:

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

String[] a = new String[10];
foo(a); // compiles and runs fine.

问题是 java 中的 arrays 相当笨拙,但可变参数是基于它们的。 你在避免它们的正确轨道上,但是当你试图动态调用可变参数方法时,你被迫使用它们。 更糟糕的是,generics 和 arrays 也不能很好地混合。 尽管如此:

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

应该可以带您到某个地方(这会将 arraylist 转换为数组)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM