このメソッド署名の省略記号(…)は何ですか?


203

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

public MessageBuilder withRecipientJids(JID... recipientJids)

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


7
ちなみに、私はHORIZONTAL ELLIPSIS文字、Unicode U + 2026 を試してみました。Java 8のNetBeans 8は「不正な文字」を報告します。したがって、Java varargには、3つのFULL STOP(ピリオド)が必要です...
バジルブルク2015年

回答:


208

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


16
引数はJIDの配列としても渡される場合があることに注意してください(これにより、可変引数が下位互換になります)。
mjn

54
また、0の可変引数(何もない)を渡すことは有効です。
Hawkeye Parker、

9
最後に重要なことですが、varargはメソッドの最後のパラメーターでなければなりません。したがって、同じメソッドに2つの可変引数パラメーターを含めることはできません。たぶん、あなたはこの方法で興味深い見つけることができますdocs.oracle.com/javase/7/docs/api/java/util/...
BlackBrain

62

メソッド内で省略記号または可変引数を使用する方法は、配列の場合と同じです。

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


22

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

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


5

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

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

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

varargsJava 1.5で追加されました


3

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.