ではApp Engineのドキュメント、省略記号は(何JID...
)このメソッドのシグネチャでますか?
public MessageBuilder withRecipientJids(JID... recipientJids)
これらの3つのドットの機能は何ですか?
ではApp Engineのドキュメント、省略記号は(何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
メソッド内で省略記号または可変引数を使用する方法は、配列の場合と同じです。
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);
以下のための可変引数メソッド、シーケンスパラメータは、同じタイプのアレイとして扱われます。したがって、次の例のように、2つのシグネチャが異なるのは、一方がシーケンスを宣言し、もう一方が配列を宣言する場合だけです。
void process(String[] s){}
void process(String...s){}
その後、コンパイル時エラーが発生します。
出典:Javaプログラミング言語の仕様。技術用語はvariable arity parameter
一般的な用語ではありませんvarargs
。
3つのドット(...)表記は実際には数学から借用されたもので、「...など」を意味します。
Javaでの使用に関してはvarargs
、を意味します。つまり、メソッド呼び出しに任意の数の引数を追加できます。唯一の制限はvarargs
、がメソッドシグネチャの最後になければならず、メソッドごとに1つしか存在できないことです。
それらはvarargs
、任意の数の引数を受け取るメソッドを作成するために使用されます。
たとえば、PrintStream.printfメソッドはそれを使用します。これは、使用する引数の数がわからないためです。
これらは、引数の最終的な位置としてのみ使用できます。
varargs
Java 1.5で追加されました
…
、Unicode U + 2026 を試してみました。Java 8のNetBeans 8は「不正な文字」を報告します。したがって、Java varargには、3つのFULL STOP(ピリオド)が必要です...
。