将参数传递给Java方法

时间:2013-09-28 10:55:31

标签: java variables arguments parameter-passing containers

我需要将参数传递给java方法func(String, String...)。 问题是我需要将所有字符串作为参数传递,但它们位于ArrayList容器中。

例如:

for(...some condition...)
{
    //the other method returns an ArrayList with different size in each iteration
    ArrayList <String> values = someOtherMethod(); 
    func(values) //values is an ArrayList<String>, containing all the arguments
}

我收到错误消息,指出ArrayList<String>无法转换为String。 值的大小会发生变化,因为someOtherMethod方法会在每次迭代时返回一个具有不同大小的容器,因此我无法将values[0], values[1], etc作为参数传递。

我猜测func需要X量的String变量,但是当容器的大小不是常数时,我不知道如何将容器转换为X量的变量。 / p>

3 个答案:

答案 0 :(得分:2)

“...”运算符接受数组,因此您可以执行以下操作:

ArrayList <String> values = someOtherMethod(); 
func(values.toArray(new String[values.size()]);

答案 1 :(得分:2)

有点复杂,因为func需要一个String,然后需要任意数量的额外Strings

List<String> values = someOtherMethod();
if (values.isEmpty()) {
    // handle special case
} else{
    func(values.get(0), values.subList(1, values.size()).toArray(new String[]));
}

答案 2 :(得分:1)

  

我猜func需要X量的String变量,

我猜您正在寻找 Varargs。

将您的功能签名更改为

public someReturnType func(String... vargs) { }

其中args的长度可变为参数。

然后在方法内部,您可以像

一样访问它们
  for (String currentarg: args) {

   // do something with currentarg
 } 

作为旁注:仅适用于1.5版本。

Learn more from docs about Varargs