在应用程序引擎文档中,此方法签名中的省略号(JID...用于什么?
public MessageBuilder withRecipientJids(JID... recipientJids)
这三个点有什么作用?
顺便说一下,我试过水平省略号,…,unicode u+2026。Java 8中的NETBeaS 8报告"非法字符"。因此Java VARARGS需要三个完全停止(周期),EDOCX1×1。
那些是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
注意,参数也可以作为一个jid数组传递(这使得varargs向后兼容)。
还要注意,传递0 varargs(无)是合法的。
最后但并非最不重要的是,vararg必须是方法的最后一个参数。因此,在同一个方法中不能有两个vararg参数。也许,你可以找到这个方法有趣的DOCS. Oracle .COM/JavaSe/ 7 /DOCS/API/Java/UTIL/Helip;
在方法中使用省略号或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
second"
在PrintWithEllipsis中,setOfStrings的类型是一个字符串数组。因此,您可以保存编译器的一些工作并传递一个数组:
String[] argsVar = {"first","second"};
obj.PrintWithEllipsis(argsVar);
对于varargs方法,序列参数被视为相同类型的数组。因此,如果两个签名只有一个声明序列,另一个声明数组,如本例所示:
void process(String[] s){}
void process(String...s){}
然后发生编译时错误。
源代码:Java编程语言规范,技术术语是EDCOX1×10,而不是通用术语EDCOX1(4)。
+1表示数组与省略号方法的签名位。
三点(…)符号实际上是从数学中借来的,它的意思是"…等等"。
至于它在Java中的使用,它代表EDCOX1(4),这意味着可以将任意数量的参数添加到方法调用中。唯一的限制是varargs必须在方法签名的末尾,并且每个方法只能有一个。
它们是varargs,用于创建接收任意数量参数的方法。
例如,printstream.printf方法使用它,因为您不知道将使用多少个参数。
它们只能用作参数的最终位置。
在Java 1.5上添加EDCOX1〔4〕
这意味着该方法接受JID类型的变量数参数("varargs")。在此方法中,提出了recipientJids。
对于这样的情况,这很方便:您有一个方法可以选择以自然方式处理多个参数,并且允许您编写可以将一个、两个或三个参数传递给同一个方法的调用,而不需要动态创建数组。
它还支持来自C的成语,如sprintf;例如,参见String.format()。