222

App EngineのドキュメントではJID...、このメソッドシグネチャの省略記号()は何ですか?

public MessageBuilder withRecipientJids(JID... recipientJids)

これらの3つのドットの機能は何ですか?

4

5 に答える 5

221

それらは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

于 2010-03-02T22:38:13.043 に答える
71

メソッド内で省略記号または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

于 2014-05-04T06:11:53.857 に答える
25

3つのドット(...)表記は、実際には数学から借用されており、「...など」を意味します。

Javaでの使用に関しては、を表します。これvarargsは、メソッド呼び出しに任意の数の引数を追加できることを意味します。唯一の制限はvarargs、メソッドシグネチャの最後にある必要があり、メソッドごとに1つしか存在できないことです。

于 2010-03-02T23:01:57.183 に答える
7

これらはvarargs、任意の数の引数を受け取るメソッドを作成するために使用されます。

たとえば、PrintStream.printfメソッドはこれを使用します。これは、使用する引数の数がわからないためです。

これらは、引数の最終位置としてのみ使用できます。

varargsJava1.5で追加されました

于 2010-03-02T22:48:49.053 に答える
4

これは、メソッドが型の可変数の引数( "varargs")を受け入れることを意味しますJID。メソッド内で、recipientJidsが表示されます。

これは、オプションで複数の引数を自然な方法で処理できるメソッドがある場合に便利です。また、作成の醜さを感じることなく、1つ、2つ、または3つのパラメーターを同じメソッドに渡すことができる呼び出しを記述できます。その場でアレイ。

sprintfまた、Cなどのイディオムも有効にします。String.format()たとえば、を参照してください。

于 2010-03-02T22:41:53.267 に答える