这个方法签名中的省略号(…)是什么?

在App Engine文档中 ,此方法签名中的省略号( JID... )是什么?

 public MessageBuilder withRecipientJids(JID... recipientJids) 

这三个点的function是什么?

这些是Java可变参数。 它们让你传递任何数量的特定types的对象(在这种情况下,它们是JIDtypes的)。

在你的例子中,下面的函数调用是有效的:

 MessageBuilder msgBuilder; //There should probably be a call to a constructor here ;) MessageBuilder msgBuilder2; msgBuilder.withRecipientJids(jid1, jid2); msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid); 

在这里查看更多信息: http : //java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

在方法中使用省略号可变参数的方式就好像是一个数组:

 public void PrintWithEllipsis(String...setOfStrings) { for (String s : setOfStrings) System.out.println(s); } 

这个方法可以被调用如下:

 obj.PrintWithEllipsis(); // prints nothing obj.PrintWithEllipsis("first"); // prints "first" obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond" 

PrintWithEllipsisPrintWithEllipsis的types是一个String数组。 所以你可以保存编译器一些工作,并传递一个数组:

 String[] argsVar = {"first", "second"}; obj.PrintWithEllipsis(argsVar); 

对于可变参数方法,序列参数被视为相同types的数组。 所以如果两个签名的区别只在于声明一个序列而另一个是数组,如下例所示:

 void process(String[] s){} void process(String...s){} 

那么会发生编译时错误。

来源: Java编程语言规范,其中技术术语是variable arity parameter而不是常见术语varargs

三点(…)符号实际上是从math中借用的,意思是“……等等”。

至于它在Java中的使用,它代表varargs ,这意味着可以将任意数量的参数添加到方法调用中。 唯一的限制是varargs必须在方法签名的末尾,每个方法只能有一个。

这些是varargs它们被用来创build一个接收任意数量参数的方法。

例如PrintStream.printf方法使用它,因为你不知道你会使用多less个参数。

他们只能用作论据的最终位置。

在Java 1.5中增加了varargs

这意味着该方法接受JIDtypes的可变数量的参数 (“可变参数”)。 在该方法中,提供了recipientJids

如果你有一个方法可以有select地自然地处理多个参数,并允许你编写可以传递一个,两个或三个参数到同一个方法的调用,而不会造成创build的丑陋在飞行中的arrays。

它也使成语,如来自C的sprintf ; 例如参见String.format()

你可以在你的方法中定义一个可以接受可变参数(可变参数)的参数。 以下是Employee类的一个例子,它定义了一个接受可变参数的方法daysOffWork:

 class Employee { public int daysOffWork(int... days) { int daysOff = 0; for (int i = 0; i < days.length; i++) { daysOff += days[i]; } return daysOff; } } 

数据types后面的省略号(…)表示方法参数days可以传递一个数组或多个以逗号分隔的值。