web-dev-qa-db-ja.com

Java引数が無制限のメソッド

Springフレームワークは、好きなだけ引数を渡すことができるメソッドを使用します。

また、無制限の量のデータを取得できる関数を作成したいと思います。この機能をどのように呼び出すと、読みやすくなります。または、どうすれば定義できますか?

本当にありがとう。

48
Franz Kafka

varargs と呼ばれます。

メソッドは任意の数の引数を取ることができます。メソッド内の配列としてアクセス可能です:

public void foo(String... args) {
    for (String arg : args) {
      // do smth with arg.
     }
}

これは 構文糖 です。コンパイラーは配列の作成を隠すため、代わりに

 bar.foo(new String[] {"1", "2", "3"});

あなたが書く

 bar.foo("1", "2", "3");
126
Bozho

Bozhoの答えを追加するには、varargsの前にメソッドに他の引数を含めることもできます。

// foo(13, "foo", "bar", "baz");
// will print:
// 13 - |foo||bar||baz|
public void foo(int a, String... b) {
    System.out.println(a + " - ");

    for (String c : b) {
        System.out.print("|" + c + "|");
    }
}

ただし、後で異なるタイプの引数を使用することはできません。これらは機能しません:

public void bar(String... b, int b);
public void foo(int a, String... b, int b);
10
nicovank