問題
ArrayList<Block>
伸びませんArrayList<Entity>
。(少し簡略化しました。)
なぜだめですか?
に を入れてみてEntity
くださいArrayList<Block>
。
new ArrayList<Block>().add(new Entity());
あなたはそれを行うことはできません !ただし、任意の(またはそのサブクラス) にはs を挿入ArrayList<Entity>
できる必要があります。Entity
new ArrayList<Entity>().add(new Entity());
したがって、ArrayList<Block>
のサブクラスと見なすことはできませんArrayList<Entity>
。
ソリューション
grid
(1) 次のように宣言できます。
public ArrayList<? extends ArrayList<? extends ArrayList<? extends Entity>>> grid;
?
inは「? extends Entity
ワイルドカード」です。これは、実際の型が不明であることを意味しますが、拡張する必要がありますEntity
。
Entity
これは、( を呼び出した後にキャストしない限り) から sしか取得できずget
、(実際の型が不明であるため) 何も追加できないため、役に立つ場合とそうでない場合があります。
(2) または、実際に必要なものはArrayList<ArrayList<ArrayList<Entity>>>
. その場合、冗長になります。
grid = new ArrayList<ArrayList<ArrayList<Entity>>>();
for(ArrayList<ArrayList<Block> blockList1 : ctgf.blockMap) {
ArrayList<ArrayList<Entity>> entityList1 = new ArrayList<ArrayList<Entity>>();
for(ArrayList<Block> blockList2: blockList1) {
entityList1.add(new ArrayList<Entity>(blockList2));
}
grid.add(entityList1);
}