在应用程序引擎文档中,这个方法签名中的省略号(JID…)是干什么用的?
public MessageBuilder withRecipientJids(JID... recipientJids)
这三个点的作用是什么?
在应用程序引擎文档中,这个方法签名中的省略号(JID…)是干什么用的?
public MessageBuilder withRecipientJids(JID... recipientJids)
这三个点的作用是什么?
当前回答
这些是Java变量。它们允许您传递任意数量的特定类型的对象(在本例中,它们是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
其他回答
这些是Java变量。它们允许您传递任意数量的特定类型的对象(在本例中,它们是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
在方法中使用省略号或可变参数的方法就好像它是一个数组:
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编程语言规范,其中的技术术语是可变参数,而不是通用术语变参数。
三个点(…)符号实际上是从数学中借来的,它的意思是“…”等等。”
至于它在Java中的使用,它代表可变参数,这意味着可以向方法调用中添加任意数量的参数。唯一的限制是可变参数必须在方法签名的末尾,并且每个方法只能有一个。
它们是可变参数,用于创建接收任意数量参数的方法。
例如PrintStream。Printf方法使用它,因为你不知道你会使用多少个参数。
它们只能作为论证的最终立场。
varargs是在Java 1.5中添加的
这意味着该方法接受JID类型的可变数量的参数(“varargs”)。在该方法中,将显示recipientJids。
当你有一个方法可以以自然的方式可选地处理多个参数时,这是很方便的,并且允许你编写调用,可以将一个、两个或三个参数传递给同一个方法,而不用在运行中创建一个数组。
它还支持一些习语,如来自C的sprintf;例如,参见String.format()。