方法的Java变量号或参数

时间:2010-02-25 01:24:35

标签: java methods arguments parameter-passing variadic-functions

是否可以声明一个允许可变数量参数的方法?

定义中使用的符号是什么,表明该方法应该允许可变数量的参数?

答案: varargs

6 个答案:

答案 0 :(得分:243)

这是对的。您可以在the Oracle guide on varargs中找到有关它的更多信息。

以下是一个例子:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

可以称为

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.

答案 1 :(得分:13)

是的,有可能:

public void myMethod(int...numbers) { ... }

答案 2 :(得分:13)

Variable number of arguments

可以将可变数量的参数传递给方法。但是,那里 是一些限制:

  • 可变数量的参数必须都是相同的类型
  • 它们被视为方法
  • 中的数组
  • 它们必须是方法的最后一个参数

要理解这些限制,请考虑以下代码片段中的方法,该方法用于返回整数列表中的最大整数:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

源代码Or​​acle认证助理Java SE 7程序员学习指南2012

答案 3 :(得分:7)

对于不同类型的参数,有 3点

public void foo(Object... x) {
    String first    =  x.length > 0 ? (String)x[0]  : "Hello";
    int duration    =  x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

然后叫它

foo("Hii"); 
foo("Hii", 146); 

为了安全起见,请使用如下:     
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

  

这种方法的主要缺点是,如果可选参数属于不同类型,则会丢失静态类型检查。   请参阅more variations

答案 4 :(得分:5)

答案 5 :(得分:0)

是Java允许方法参数中的vargs

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}