【问题标题】:Passing arguments to a Java method将参数传递给 Java 方法
【发布时间】:2013-10-04 15:50:24
【问题描述】:

我需要将参数传递给 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&lt;String&gt; 无法转换为 String。 值的大小会发生变化,因为someOtherMethod 方法每次迭代都会返回一个大小不同的容器,所以我不能将values[0], values[1], etc 作为参数传递。

我猜func 想要 X 数量的字符串变量,但是当容器的大小不恒定时,我不知道如何将容器转换为 X 数量的变量。

【问题讨论】:

  • func 方法的确切签名是什么?
  • 另外解释一下func 方法的用途可能会导致猜测类型的答案更少,而答案质量更高。

标签: java variables arguments parameter-passing containers


【解决方案1】:

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

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

【讨论】:

    【解决方案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[]));
    }
    

    【讨论】:

      【解决方案3】:

      我猜 func 需要 X 个字符串变量,

      我猜你正在寻找可变参数。

      更改您的函数签名以接受为

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

      以可变长度的args作为参数。

      然后在方法内部,你可以像访问它们一样

        for (String currentarg: args) {
      
         // do something with currentarg
       } 
      

      附带说明:仅适用于 1.5 版。

      Learn more from docs about Varargs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        相关资源
        最近更新 更多