基本上,我一直在尝试构建一个2D数组,它包含各种子类的数组,这些子类都扩展了同一个父类。这里讨论的父类是带有Rock,RockMoving,Powerups,Enemy和PlayerCharacter的GameElement,它们都扩展了GameElement。
public class GameWorld implements Serializable {
private static GameWorld gameWorld = new GameWorld();
private Array<Array<GameElement>> gameElementsArray = new Array<Array<GameElement>>();
private PlayerCharacter playerCharacter;
private Array<Rock> rocks;
private Array<RockMoving> rocksMoving;
private Array<Enemy> enemyArray;
private Array<Powerups> powerups;
private Vector2 backgroundPos1, backgroundPos2;
public static GameWorld getInstance() {
return gameWorld;
}
private GameWorld() {
gameElementsArray.add(rocks);
gameElementsArray.add(rocksMoving);
gameElementsArray.add(powerups);
gameElementsArray.add(enemyArray);
}
}
问题是,我得到
add(com.badlogic.gdx.utils.Array<com.mygdx.game.sprites.GameElement>)
in Array cannot be applied to
(com.badlogic.gdx.utils.Array<com.mygdx.game.sprites.enemies.Enemy>)
响应错误。我们正在使用libgdx自己的数组库(我正慢慢地讨厌它。)。
答案 0 :(得分:1)
这是Java烦人的泛型的限制。您可以为主数组提供? extends GameElement
类型,因此声明为:
private Array<Array<? extends GameElement>> gameElementsArray = new Array<Array<? extends GameElement>>();
这允许将任何扩展GameElement
类型的数组添加到数组中(您甚至可以添加类型为GameElement
的数组)。
PS:如果你非常讨厌数组,为什么不使用Java的列表呢?