【问题标题】:Trying to add child type arrays into parent type 2D array尝试将子类型数组添加到父类型二维数组中
【发布时间】:2018-04-29 18:06:04
【问题描述】:

基本上,我一直在尝试构建一个二维数组,其中包含所有扩展同一个父类的各种子类的数组。这里讨论的父类是 GameElement,其中 Rock、RockMoving、Powerups、Enemy 和 PlayerCharacter 都扩展了 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 自己的数组库(我正在慢慢讨厌它。)。

【问题讨论】:

    标签: java arrays libgdx


    【解决方案1】:

    这是 Java 烦人的泛型的一个限制。你可以给主数组一个类型? extends GameElement,所以声明是:

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

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

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

    【讨论】:

    • 无论如何,Java 列表都会有相同的语法限制。
    • 因为我正在与一个团队合作。他们想使用 libgdx 自己的数组。谢谢顺便说一句,你的回答真的很有用。
    • 一个快速的后续问题,有没有办法为增强循环执行此操作,以便它可以处理这个二维数组?因为内部 for 循环需要 Object 类型并拒绝 GameElement 类型。它不允许我使用这个(GameElement ge : arr)
    • @BerkErzin 唯一的办法就是这样做:for (Array&lt;? extends GameElement&gt; arr : gameElementsArray) { for (GameElement ge : arr) { //code } }
    • @user5074736 这行得通。 (gameElementsArray.get(arrayNum)).addAll(ge);问题是现在这条线拒绝工作。这里 arrayNum 是 int GameElement ... ge 是另一个参数。它给出了“无法解析方法 addAll”错误。像这样一点一点地打扰你,我深表歉意。
    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2019-07-23
    • 2011-02-08
    相关资源
    最近更新 更多