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