App Engine docs では、このメソッドシグネチャの省略記号(JID...
)は何ですか?
public MessageBuilder withRecipientJids(JID... recipientJids)
これらの3つのドットの機能は何ですか?
それらは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
メソッド内でEllipsisまたは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[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
varargsメソッドの場合、シーケンスパラメーターは同じ型の配列として扱われます。したがって、この例のように、一方がシーケンスを宣言し、もう一方が配列を宣言するという点でのみ2つの署名が異なる場合:
void process(String[] s){}
void process(String...s){}
コンパイル時エラーが発生します。
ソース: Javaプログラミング言語 仕様。技術用語は、一般的な用語varargs
ではなくvariable arity parameter
です。
3つのドット(...)表記は、実際には数学から借用されており、「...など」を意味します。
Javaでの使用に関しては、varargs
の略で、メソッド呼び出しに任意の数の引数を追加できることを意味します。唯一の制限は、varargs
がメソッドシグネチャの最後になければならず、メソッドごとに1つしか存在できないことです。
これらは varargs
であり、任意の数の引数を受け取るメソッドを作成するために使用されます。
たとえば、使用する引数の数がわからないため、 PrintStream.printf メソッドはそれを使用します。
引数の最終位置としてのみ使用できます。
varargs
が Java 1.5 に追加されました
これは、メソッドがJID
型の 引数の可変数 ( "varargs")を受け入れることを意味します。メソッド内では、recipientJids
が表示されます。
これは、オプションで複数の引数を自然な方法で処理できるメソッドを持っている場合に便利です。オンザフライの配列。
また、Cのsprintf
などのイディオムも有効にします。たとえば、String.format()
を参照してください。