12

Javaでは、コンパイルできます

Object[] obj = {new Object[1], new Object[2]};

しかし、私はコンパイルすることはできません

Object obj = {new Object(), new Object()};

one-dimensional array最初の例では、 ofを宣言し、Objectsそれに を割り当てますtwo-dimensional array。2 番目では、 を宣言し、Objectそれに 1 次元配列を割り当てます。

Java 配列が extends の場合Object、2 番目のコード フラグメントがコンパイルされないのはなぜですか? 最初はなぜですか?

4

4 に答える 4

1

問題は、イニシャライザを使用して配列を作成する場合、コンパイラは、提供された型に対して要素の型をチェックすることによって、イニシャライザからのすべての要素が同じ提供された型であることを確認する必要があることです。

とはいえ、配列を初期化するときは常に型情報を提供する必要があります。そうしないと、コンパイラは配列の初期化が有効かどうかを確認する方法がわからないため、illegal initializer error.

配列をオブジェクトに割り当てるのに問題はありません。たとえば、次のことができます。

int[] arr = {1,2};
Object obj = arr;

次のコードはコンパイルされません。

Object obj = {1,2};

コンパイラが初期化子の値を検証する必要がある要素の型を明示的に指定しなかったためです。これは、Java での配列の初期化に必要です。

次のコードがコンパイルされます。

Object[] obj = {1,2};

要素の型が指定されているため (つまりObject)、コンパイラは の型を型に対してチェックします1(2のサブタイプであるObjectため、これは成功します)。IntegerObject

于 2013-02-02T22:01:08.900 に答える