3

引数を取る関数がありString[]ます。これはどのように可能ですか:

String[] string = {"string1", "string2"};
myFunction(string);

動作しますが、これは次のとおりです。

myFunction({"string1", "string2"});

しませんか?エラーが表示されます:

不正な式の開始
声明ではない
";" 期待される
4

3 に答える 3

6

スタンドアロンはシュガー構文です。コンパイラは、配列を宣言して初期化{"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");
于 2013-07-10T13:43:31.330 に答える
3

あなたが必要

myFunction(new String[]{"string1", "string2"});

構文については、Java 言語仕様の第 10.2 章配列変数で説明されています。

于 2013-07-10T13:39:13.183 に答える
1

これは{"string1","string2"}、メソッドの引数として渡したときに、何を期待すればよいかわからないためです。

ドキュメントによると、構文は、配列変数を同時に宣言してインスタンス化する場合にのみ許可されます

int[] a={1,4,8,6}; //allowed

これにより、括弧内に渡された値の数と同じ長さを持つ int の配列が作成されます。. このように匿名配列オブジェクトを渡すことができます

method(new int[]{2,4,8,9});

しかし、好きではないmethod({2,4,8,9});

于 2013-07-10T14:13:58.617 に答える