下面方法中字符串后面的3个点是什么意思?

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

当前回答

A really common way to see a clear example of the use of the three dots it is present in one of the most famous methods in android AsyncTask ( that today is not used too much because of RXJAVA, not to mention the Google Architecture components), you can find thousands of examples searching for this term, and the best way to understand and never forget anymore the meaning of the three dots is that they express a ...doubt... just like in the common language. Namely it is not clear the number of parameters that have to be passed, could be 0, could be 1 could be more( an array)...

其他回答

语法: (三点…)——>表示我们可以添加0个或多个对象,传递参数或传递object类型的数组。

public static void main(String[] args){}
public static void main(String... args){}

定义: 1)对象…参数只是一个对象数组的引用。

2) ('String[]'或String…)它可以处理任意数量的字符串对象。在内部,它使用引用类型object的数组。

i.e. Suppose we pass an Object array to the ... argument - will the resultant argument value be a two-dimensional array - because an Object[] is itself an Object:

3)如果你想用一个参数调用方法,而它恰好是一个数组,你必须显式地将它包装起来

another. method(new Object[]{array}); 
OR 
method((Object)array), which will auto-wrap.

应用程序: 它主要用于参数数量是动态的(运行时知道的参数数量)和覆盖的情况。 一般规则-在方法中,我们可以传递任意类型和任意数量的参数。我们不能在任何特定参数之前添加object(…)参数。 即。

void m1(String ..., String s) this is a wrong approach give syntax error.
void m1(String s, String ...); This is a right approach. Must always give last order prefernces.   

这个特性叫做可变参数,是Java 5中引入的一个特性。这意味着函数可以接收多个String参数:

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

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

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

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

这个答案很大程度上借鉴了kiswa和Lorenzo的……也来自Graphain的评论。

这意味着零个或多个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…字符串)是好的,但myMethod(字符串…字符串,int i)是不行的。

感谢Vash在评论中的澄清。

同样为了说明一些问题,重要的是要知道var-arg参数被限制为一个,你不能有多个var-art参数。例如,这是非法的:

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

这是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[]作为参数。