【Android】对象为null的一个原因:在方法内部,重新创建了一个新的对象并将其赋值给原对象,但这并不会改变原始的原对象的引用
疑问
现在有代码如下:
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。