What is the ellipsis (…) for in this method signature?
在应用程序引擎文档中,此方法签名中的省略号(
1 | public MessageBuilder withRecipientJids(JID... recipientJids) |
这三个点有什么作用?
那些是Java VARARGS。它们允许您传递任意数量的特定类型的对象(在本例中,它们是jid类型)。
在您的示例中,以下函数调用是有效的:
1 2 3 4 | 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的方法就像它是一个数组:
1 2 3 4 |
可以按如下方式调用此方法:
1 2 3 4 | obj.PrintWithEllipsis(); // prints nothing obj.PrintWithEllipsis("first"); // prints"first" obj.PrintWithEllipsis("first","second"); // prints"first second" |
在
1 2 |
对于varargs方法,序列参数被视为相同类型的数组。因此,如果两个签名只有一个声明序列,另一个声明数组,如本例所示:
然后发生编译时错误。
源代码:Java编程语言规范,技术术语是EDCOX1×10,而不是通用术语EDCOX1(4)。
三点(…)符号实际上是从数学中借来的,它的意思是"…等等"。
至于它在Java中的使用,它代表EDCOX1(4),这意味着可以将任意数量的参数添加到方法调用中。唯一的限制是
它们是
例如,printstream.printf方法使用它,因为您不知道将使用多少个参数。
它们只能用作参数的最终位置。
在Java 1.5上添加EDCOX1〔4〕
这意味着该方法接受
对于这样的情况,这很方便:您有一个方法可以选择以自然方式处理多个参数,并且允许您编写可以将一个、两个或三个参数传递给同一个方法的调用,而不需要动态创建数组。
它还支持来自C的成语,如