【问题标题】:Java variable number of arguments for a method方法的 Java 变量号或参数
【发布时间】:2011-01-20 19:36:52
【问题描述】:

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

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

答案:可变参数

【问题讨论】:

  • 自从作业以来,我们不想知道你的问题,我们只想知道你在学习。

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


【解决方案1】:

是的,有可能:

public void myMethod(int... numbers) { /* your code */ }

【讨论】:

    【解决方案2】:

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

    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("..."); }

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        没错。您可以在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.
        

        【讨论】:

        • 可以做各种类型的参数吗?例如(字符串...字符串,整数...整数)。以任何顺序的任何类型的参数怎么样?
        • @trusktr:如果你想要任何对象,只需使用Object...
        • @trusktr 不,原语不是对象。这里有一个很好的解释:programmerinterview.com/index.php/java-questions/…
        • @Richard:使用Object... args 将与原语一起使用,因为autoboxing
        • @StevenVascellaro :我假设参数像数组一样处理,所以你可以简单地做varargs.length
        【解决方案5】:
        Variable number of arguments
        

        可以将可变数量的参数传递给方法。然而,有 有一些限制:

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

        要了解这些限制,请考虑以下代码 sn-p 中用于返回整数列表中最大整数的方法:

        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

        【讨论】:

          【解决方案6】:

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-18
            • 1970-01-01
            • 2012-12-09
            • 2015-06-27
            相关资源
            最近更新 更多