【问题标题】:Collection to method parameters?收集到方法参数?
【发布时间】:2015-05-07 19:55:51
【问题描述】:

我们有一个方法:

public void foo (String s1, String s2, String s3) { 
    ...
}

还有一系列的选择。也许 hashmap,也许 list,都无所谓。

有没有办法将集合“转换”为方法参数?比如:

public void foo (getParamters(map)) { ... }

是的,我当然可以这样做

public void foo (map.get(0), map.get(1), map.get(3)) { ... }

但我正在考虑一些更自动的东西,这可以帮助我解决更大的问题。

【问题讨论】:

  • 创建一个以 Collrction 作为参数的重载方法,并使用提取的参数调用您的方法。

标签: java methods collections parameters


【解决方案1】:

您可以将 Collection 转换为数组并将数组传递给方法:

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

...

String[] arr = map.keySet().toArray (new String[0]);
foo (arr);

由于您事先不知道集合中的元素数量,因此使用可变参数声明方法比在 foo (String s1, String s2, String s3) 中使用的固定数量的参数更有意义。

【讨论】:

  • 要将其扩展为 其他类型 而不仅仅是 String.. 您可以传递一个对象数组并在提取参数之前在方法内部进行 instanceof 检查: )
【解决方案2】:

您可以使用可变参数,例如:

public static void main(String[] args) {
    test("1", "2");
    test("1", "2", "3");

}

public static void test(String ...args){
    for (int i = 0; i < args.length; i++) {
        //do something
    }
}

【讨论】:

    【解决方案3】:

    您可以使用可变参数,它允许方法接受零个或多个参数。如果我们不知道必须在方法中传递多少参数,可变参数是更好的方法。

    语法:

    return_type method_name(data_type... variableName){
      // code snippet
    }
    

    例子:

    public void varargsMethod(String... values){          
        for(String s:values){  
           System.out.println(s);  
        }  
    }
    

    运行example

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多