問題
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);
}