此方法签名中的省略号 (...) 是什么?
在 App Engine 文档中,此方法签名中的省略号 () 是什么?JID...
public MessageBuilder withRecipientJids(JID... recipientJids)
这三个点有什么作用?
在 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"
在 里面,的类型是 String 的数组。因此,您可以为编译器节省一些工作并传递一个数组:PrintWithEllipsis
setOfStrings
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
对于 varargs 方法,序列参数被视为相同类型的数组。因此,如果两个签名的区别仅在于一个签名声明一个序列,另一个签名声明数组,如本例所示:
void process(String[] s){}
void process(String...s){}
则发生编译时错误。
来源:Java编程语言规范,其中技术术语而不是通用术语。variable arity parameter
varargs