【问题标题】:Java "params" in method signature?方法签名中的Java“参数”?
【发布时间】:2009-02-06 10:04:31
【问题描述】:

在C#中,如果你想让一个方法的参数数量不定,你可以把方法签名中的最后一个参数设为params,这样方法参数看起来像一个数组,但允许每个使用方法的人通过调用者需要多少该类型的参数。

我相当肯定 Java 支持类似的行为,但我不知道该怎么做。

【问题讨论】:

    标签: java variadic-functions params method-declaration


    【解决方案1】:

    在 Java 中它被称为varargs,语法看起来像一个常规参数,但在类型后面有一个省略号(“...”):

    public void foo(Object... bar) {
        for (Object baz : bar) {
            System.out.println(baz.toString());
        }
    }
    

    可变参数参数必须始终是方法签名中的last参数,并且在访问时就像您收到该类型的数组一样(例如,Object[] 在此案例)。

    【讨论】:

    • 谢谢,我在查找其他内容时奇怪地发现了这一点,并亲自来这里回答问题。
    【解决方案2】:

    这将在 Java 中发挥作用

    public void foo(String parameter, Object... arguments);

    您必须添加三个点... 并且varagr 参数必须是方法签名中的最后一个。

    【讨论】:

      【解决方案3】:

      正如之前的答案所写,它是varargs 并用ellipsis 声明(...

      此外,您可以传递值类型和/或引用类型或两者混合(谷歌 Autoboxing)。此外,您可以将方法参数用作数组,如下面的printArgsAlternate 方法所示。

      演示代码

      public class VarargsDemo {
      
          public static void main(String[] args) {
              printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
              printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
          }
      
          private static void printArgs(Object... arguments) {
              System.out.print("Arguments: ");
              for(Object o : arguments)
                  System.out.print(o + " ");
      
              System.out.println();
          }
      
          private static void printArgsAlternate(Object... arguments) {
              System.out.print("Arguments: ");
      
              for(int i = 0; i < arguments.length; i++)
                  System.out.print(arguments[i] + " ");
      
              System.out.println();
          }
      
      }
      

      输出

      Arguments: 3 true Hello! true 25.3 a X 
      Arguments: 3 true Hello! true 25.3 a X 
      

      【讨论】:

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