在App Engine文档中,JID...
此方法签名中的省略号()是什么?
public MessageBuilder withRecipientJids(JID... recipientJids)
这三个点的功能是什么?
那些是Java varargs.它们允许您传递任意数量的特定类型的对象(在这种情况下,它们是JID类型).
在您的示例中,以下函数调用有效:
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
在方法中使用省略号或varargs的方法就像它是一个数组:
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
,类型setOfStrings
是一个String数组.所以你可以保存编译器一些工作并传递一个数组:
String[] argsVar = {"first", "second"}; obj.PrintWithEllipsis(argsVar);
对于varargs方法,序列参数被视为相同类型的数组.因此,如果两个签名的区别仅在于一个声明一个序列而另一个声明是一个数组,如下例所示:
void process(String[] s){} void process(String...s){}
然后发生编译时错误.
来源:Java编程语言规范,其中技术术语variable arity parameter
而不是常用术语varargs
.
三点(......)表示法实际上是从数学中借用的,它的意思是"......等等".
至于它在Java中的用法,它代表varargs
,意味着可以将任意数量的参数添加到方法调用中.唯一的限制是varargs
必须在方法签名的末尾,每个方法只能有一个.
这些是varargs
用于创建接收任意数量参数的方法.
例如PrintStream.printf方法使用它,因为你不知道你将使用多少个参数.
它们只能用作参数的最终位置.
varargs
在Java 1.5上添加了