16

私はこのようなことを試しました:


boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};

しかし、このコードはコンパイルさえしません。これについて何か説明はありますか?は funkyBoolean ? {1,2,3} : {4,5,6} 有効な表現ではありませんか? 前もって感謝します!

4

3 に答える 3

33

{1, 2, 3}この構文は非常に限られた状況でのみ使用できますが、これはその 1 つではありません。これを試して:

int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};

ちなみに、適切な Java スタイルは、宣言を次のように記述することです。

int[] array = ...

編集:記録のために、{1, 2, 3}非常に制限されている理由は、その型があいまいであるためです。理論的には、integer、long、float などの配列である可能性があります。さらに、JLS で定義されている Java 文法では禁止されているため、それで十分です。

于 2009-11-25T13:07:56.263 に答える
6
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
于 2009-11-25T13:07:41.117 に答える
3

配列初期化子は、宣言で指定することも、配列作成式(§15.10)の一部として指定して、配列を作成し、いくつかの初期値を提供することもできます。

これがJava仕様(10.6)の内容です。したがって、「短い」バージョン(作成式を含む)は宣言()でのみ許可されます。int[] a = {1,2,3};他のすべての場合new int[]{1,2,3}、初期化子を使用する場合は、構成が必要です。

于 2009-11-25T13:21:28.887 に答える