引数を取る関数がありString[]
ます。これはどのように可能ですか:
String[] string = {"string1", "string2"};
myFunction(string);
動作しますが、これは次のとおりです。
myFunction({"string1", "string2"});
しませんか?エラーが表示されます:
不正な式の開始 声明ではない ";" 期待される
スタンドアロンはシュガー構文です。コンパイラは、配列を宣言して初期化{"string1", "string2"}
するときにのみ、本来あるべきものを推測できます。ただし、この構文だけでは機能しません。
String[] s1 = {"abc"}; // works
String[] s2;
s2 = {"abc"}; // error, need to explicitly use 'new String[]{"abc"}'
余談ですが、あなたの場合、varargsを使用して明示的な配列の作成を回避できる場合があります。
void myFunction(String... args) {
// args is a String[]
}
...
myFunction("string1", "string2");
これは{"string1","string2"}
、メソッドの引数として渡したときに、何を期待すればよいかわからないためです。
ドキュメントによると、構文は、配列変数を同時に宣言してインスタンス化する場合にのみ許可されます
int[] a={1,4,8,6}; //allowed
これにより、括弧内に渡された値の数と同じ長さを持つ int の配列が作成されます。. このように匿名配列オブジェクトを渡すことができます
method(new int[]{2,4,8,9});
しかし、好きではないmethod({2,4,8,9});