当前位置:  开发笔记 > 编程语言 > 正文

此方法签名中的省略号(...)是什么?

如何解决《此方法签名中的省略号()是什么?》经验,为你挑选了4个好方法。

在App Engine文档中,JID...此方法签名中的省略号()是什么?

public MessageBuilder withRecipientJids(JID... recipientJids)

这三个点的功能是什么?



1> FrustratedWi..:

那些是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


另请注意,传递0 varargs(无)是合法的.
请注意,参数也可以作为JID数组传递(这使得varargs向后兼容).
最后但同样重要的是,vararg必须是该方法的最后一个参数.因此,您不能在同一方法中使用两个vararg参数.也许,你可以找到这个方法有趣http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList%28T ....%29

2> Lucio..:

在方法中使用省略号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.


数组vs省略号方法签名位为+1.

3> James Goodwi..:

三点(......)表示法实际上是从数学中借用的,它的意思是"......等等".

至于它在Java中的用法,它代表varargs,意味着可以将任意数量的参数添加到方法调用中.唯一的限制是varargs必须在方法签名的末尾,每个方法只能有一个.



4> OscarRyz..:

这些是varargs用于创建接收任意数量参数的方法.

例如PrintStream.printf方法使用它,因为你不知道你将使用多少个参数.

它们只能用作参数的最终位置.

varargs在Java 1.5上添加了

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有