web-dev-qa-db-ja.com

コンストラクターパラメーターとしての文字列配列の初期化

Javaでは、次の方法でString配列を初期化することは完全に正当です。

String[] s = {"FOO", "BAR"};

ただし、パラメーターとして文字列配列をとるクラスをインスタンス化しようとすると、次のコードは許可されません。

Test t = new Test({"test"});

しかし、これは再び機能します:

Test t = new Test(new String[] {"test"});

誰かがこれがなぜなのか説明できますか?

29
Hermann Hans
String[] s = {"FOO", "BAR"};  

これは宣言時にのみ許可されます

できません

String[] s;
s={"FOO", "BAR"};  
45
Jigar Joshi

なぜならType[] x = { ... }は、配列の初期化構文です。 { ... }は、特定のコンテキストでのみ特定の方法で解釈されます。

5
Karl Knechtel

文字列配列を渡す簡単な方法が必要な場合は、可変引数を使用することをお勧めします

class Test {
   public Test(String...args);
}

// same as new Test(new String[] { "test", "one" })
Test t = new Test("test", "one"); 
3
Peter Lawrey