疑问
现在有代码如下:
private GameList multiGameList;
/**
* 获取多人游戏列表
*
* @return 多人游戏列表
*/
public GameList getMultiGameList() {
if (null == multiGameList) {
createMultiOrSingleGameList(multiGameList,GameList.TYPE_MULTI);
}
return multiGameList;
}
/**
* 创建多人或者单人游戏列表
* @param gameList 游戏列表容器
* @param type 游戏类型,1为单人,2为多人
*/
private void createMultiOrSingleGameList(GameList gameList, int type) {
gameList = new GameList();
for (GameList.Game game : bizGameList.getList()) {
// 当为多人或者单人游戏的时候整理到游戏列表中
if (game.getGameType() == type) {
gameList.getList().add(game);
}
}
}
为啥我在其他类调用getMultiGameList()方法得到的对象还是null,这样写有什么问题,为什么?如何规避呢?
解答
问题出在createMultiOrSingleGameList方法中,你传递的gameList参数是一个对象的引用。在方法内部,你重新创建了一个新的GameList对象并将其赋值给gameList,但这并不会改变原始的multiGameList对象的引用。
为了解决这个问题,你可以修改createMultiOrSingleGameList方法,使其返回一个新的GameList对象,而不是使用参数进行修改。然后在getMultiGameList方法中,将返回的新对象赋值给multiGameList。
修改后的代码如下所示:
private GameList multiGameList;
/**
* 获取多人游戏列表
*
* 多人游戏列表
*/
public GameList getMultiGameList() {
if (null == multiGameList) {
multiGameList = createMultiOrSingleGameList(GameList.TYPE_MULTI);
}
return multiGameList;
}
/**
* 创建多人或者单人游戏列表
* type 游戏类型,1为单人,2为多人
*/
private GameList createMultiOrSingleGameList(int type) {
GameList gameList = new GameList();
for (GameList.Game game : bizGameList.getList()) {
// 当为多人或者单人游戏的时候整理到游戏列表中
if (game.getGameType() == type) {
gameList.getList().add(game);
}
}
return gameList;
}
这样修改后,调用getMultiGameList方法会返回正确的multiGameList对象,而不是null。