Java类循环引用

时间:2016-11-19 17:47:50

标签: java class reference

我一直在尝试了解游戏启动时发生的事情。在我的评论中,我遇到了似乎是一个我不明白的循环引用。我遗漏了很多无关的代码来突出我发现令人困惑的区域。让我知道是否有令人困惑的事情,我会尽量提供尽可能多的信息。

游戏数据类(此处简化)包含有关游戏不同元素的信息。这可以包括玩家数据(此处详述),单位信息,地图板信息等。游戏中使用的所有对象都包含对GameData类的引用。

启动程序时,将执行LoadGameData类的load方法。它的目的是查询SQLite数据库并将信息加载到内存中。在下面的示例中,该方法获取对GameData对象中包含的playerList的引用。然后它查询数据库并为返回的每条记录创建一个播放器对象。当每个玩家对象被创建时,它也被赋予对GameData对象的引用,然后被添加到PlayerList,PlayerList本身是GameData对象的成员。

这不代表循环参考吗?

此外,在我看来,使用这个逻辑,游戏中的每个对象都会引用游戏中的所有其他对象。那是对的吗?当然我假设这只是一个指向GameData对象的指针,而不是GameData对象的完整副本。

class GameComponenent {
    private GameData m_data;
    public GameComponent(final GameData data) {
        m_GameData = data
    }
}

class Player extends GameComponent {
    public Player(String key, GameData data) {
        super(data);
    }
}

class GameData() {
    private PlayerList playerList = new PlayerList(this);
    private TerritoryList territories = new TerritoryList(this);
    private resourceList resources = new ResourceList(this);

    [The list goes on]

    public PlayerList getPlayerList() {
        return playerList;
    }
}

public class PlayerList extends GameDataComponent 
    public PlayerList(final GameData data) {
        super(data);
    }

    protected void addPlayer(final Player player) {
        m_players.put(player.getName(), player);
    }
}

class loadGameData() {
    GameData data;

    public void load() {
        data = new GameData();
        loadPlayerData(getPlayerDataFromDatabase());
    }

    public void loadPlayerData(Map<String, Map<String, String>> input) {
        PlayerList pl = data.getPlayerList();
        foreach (Player p : PlayerXMLNodes) {
            Player p = new Player(key, data);
            pl.addPlayer(Player);        
        }
    }
}

0 个答案:

没有答案