尝试将子类型数组添加到父类型2D数组中

时间:2018-04-29 18:06:05

标签: java arrays libgdx

基本上,我一直在尝试构建一个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自己的数组库(我正慢慢地讨厌它。)。

1 个答案:

答案 0 :(得分:1)

这是Java烦人的泛型的限制。您可以为主数组提供? extends GameElement类型,因此声明为:

private Array<Array<? extends GameElement>> gameElementsArray = new Array<Array<? extends GameElement>>();

这允许将任何扩展GameElement类型的数组添加到数组中(您甚至可以添加类型为GameElement的数组)。

PS:如果你非常讨厌数组,为什么不使用Java的列表呢?