メソッドシグネチャのJava「パラメータ」?


112

C#では、メソッドに不確定な数のパラメーターを設定する場合は、メソッドシグネチャの最後のパラメーターをaにparamsして、メソッドパラメーターを配列のように見せることができますが、メソッドを使用するすべてのユーザーがその型のパラメーターをすべて渡すことができます発信者が望むように。

Javaが同様の動作をサポートしていると確信していますが、その方法を見つけることができません。

回答:


194

Javaではvarargsと呼ばれ、構文は通常のパラメータのように見えますが、型の後に省略記号( "...")が付いています:

public void foo(Object... bar) {
    for (Object baz : bar) {
        System.out.println(baz.toString());
    }
}

varargパラメータは常にメソッドシグネチャの最後のパラメータである必要あり、そのタイプの配列を受け取ったかのようにアクセスされます(Object[]この場合など)。


3
ありがとう、私は何か他のものを探していて、自分で質問に答えるためにここに来ていたときに、自分で間違いなくこれを見つけました。
Omar Kooheji

11

これはJavaでトリックを行います

public void foo(String parameter, Object... arguments);

3つのポイントを追加する必要が...あり、varagrパラメーターはメソッドのシグニチャーの最後でなければなりません。


3

以前の回答に書かれているように、それは(...)でvarargs宣言されていますellipsis

さらに、値の型や参照型、あるいはその両方を混合して渡すことができます(google Autoboxing)。さらに、printArgsAlternate以下のメソッドで示すように、メソッドパラメータを配列として使用できます。

デモコード

public class VarargsDemo {

    public static void main(String[] args) {
        printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
        printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
    }

    private static void printArgs(Object... arguments) {
        System.out.print("Arguments: ");
        for(Object o : arguments)
            System.out.print(o + " ");

        System.out.println();
    }

    private static void printArgsAlternate(Object... arguments) {
        System.out.print("Arguments: ");

        for(int i = 0; i < arguments.length; i++)
            System.out.print(arguments[i] + " ");

        System.out.println();
    }

}

出力

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