这个方法签名中的省略号(…)是什么?
在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"
在PrintWithEllipsis
, PrintWithEllipsis
的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
这意味着该方法接受JID
types的可变数量的参数 (“可变参数”)。 在该方法中,提供了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可以传递一个数组或多个以逗号分隔的值。