繁体   English   中英

方法的 Java 变量号或参数

[英]Java variable number or arguments for a method

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

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

答案:可变参数

没错。 您可以在有关 varargs 的 Oracle 指南中找到有关它的更多信息。

下面是一个例子:

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.

是的,这是可能的:

public void myMethod(int... numbers) { /* your code */ }
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;
}

来源 Oracle Certified Associate Java SE 7 Programmer Study Guide 2012

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

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

然后调用它

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

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

这种方法的主要缺点是,如果可选参数的类型不同,则会丢失静态类型检查。 请查看更多变化

是的 Java 允许在方法参数中使用vargs

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

暂无
暂无

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

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