Java,参数中有3个点

以下方法中的3个点是什么意思?

public void myMethod(String... strings){
    // method body
}

这意味着可以传递零个或多个String对象(或它们的一个数组)作为该方法的参数。

请参阅此处的“任意数量的参数”部分:http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

在您的示例中,您可以将其称为以下任何一项:

myMethod(); // Likely useless, but possible
myMethod("one", "two", "three");
myMethod("solo");
myMethod(new String[]{"a", "b", "c"});

重要提示:以这种方式传递的参数始终是一个数组 - 即使只有一个。 确保你在方法体中这样对待它。

重要说明2:获取...的参数必须是方法签名中的最后一个。 所以, myMethod(int i, String... strings)没问题,但myMethod(String... strings, int i)不行。

感谢Vash在他的评论中的澄清。


该功能称为varargs,它是Java 5中引入的一项功能。它表示该函数可以接收多个String参数:

myMethod("foo", "bar");
myMethod("foo", "bar", "baz");
myMethod(new String[]{"foo", "var", "baz"}); // you can even pass an array

然后,你可以使用String var作为数组:

public void myMethod(String... strings){
    for(String whatever : strings){
        // do what ever you want
    }

    // the code above is is equivalent to
    for( int i = 0; i < strings.length; i++){
        // classical for. In this case you use strings[i]
    }
}

这个答案很大程度上借鉴了kiswa和Lorenzo的......以及Graphain的评论。


这是通过可变参数(可变数字参数)的Java方法。

如果你熟悉C,对这种类似于...语法使用它printf函数:

int printf(const char * format, ...);

但以一种类型安全的方式:每个参数都必须符合指定的类型(在您的示例中,它们应该都是String )。

这是一个如何使用可变参数的简单示例:

class VarargSample {

   public static void PrintMultipleStrings(String... strings) {
      for( String s : strings ) {
          System.out.println(s);
      }
   }

   public static void main(String... args) {
      PrintMultipleStrings("Hello", "world");
   }
}

...参数实际上是一个数组,所以你可以传递String[]作为参数。

链接地址: http://www.djcxy.com/p/78949.html

上一篇: Java, 3 dots in parameters

下一篇: Are base class objects implicitly added to derived classes?