解析中[]
にこのコードで括弧が正確に何をするのかわかりませんInteger[]
new Objects
private Integer data[]=(Integer[]) new Object[10];//works fine
private Integer data[]=(Integer) new Object[10];//error
private Integer data[]=(Integer) new Object[10]; //I'm a C programmer :)!
以下と同一です:
private Integer[] data=(Integer) new Object[10];
data
これで、が の配列であることがよくわかりますInteger
。
data
の型である場合、左側の変数の型が の場合はキャストInteger[]
できません。new Object[10];
Integer
Integer[]
私はあなたのためにコードを読みます:
ライン1:
new Object[10]
- Object インスタンスへの 10 個の参照用に新しい配列を作成します。それが完了すると、参照はすべて null になります。(Integer []) ...
- Object 参照の配列が実際には Integer 参照の配列、つまり Integer のインスタンスへの参照の配列であると想定する必要があることをコンパイラに伝えます。private Integer data [] = ...
- 先ほど作成した配列を data というプライベート参照変数に保持し、data が Integer の配列を参照していると仮定します。2行目:
(Integer)
- オブジェクト インスタンスの配列の 1 つの整数参照を作成するようにコンパイラに指示します。配列を 1 つのオブジェクトだけに変換する方法がないため、これは実行できません。総括する:
X []内の括弧は、 Xへの参照の配列を示します。
そして、(Y) foo読み取りは、実際には foo がタイプ Y のインスタンスであると想定します。
data
最初のケースで配列のインスタンスを作成しようとしています。しかし、2番目のケースでは、配列でInteger
あることが期待されているのに、配列を割り当てようとしています。
変数の型data
はInteger[]
(整数の配列) です。配列を宣言する従来のスタイルを使用すると、より明確になります。
private Integer[] data = ...
したがって、最初の行は式を変数の型 ( Integer[]
) にキャストしますが、2 行目Integer
は式を の型ではない にキャストするdata
ため、コンパイル エラーが発生します。
2 行目はコンパイルされますが、あまり意味がないことに注意してください。単に使用する必要があります
private Integer[] data = new Integer[10];
割り当てを可能にするために、オブジェクトの配列を整数の配列にキャストしています。
オブジェクトの配列はキャストしInteger[]
ないようにする必要がありますInteger