当前位置: 首页 > news >正文

【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。

http://www.lryc.cn/news/98930.html

相关文章:

  • macbook 软件iMovie for Mac(专业视频剪辑工具)中文版
  • web APIs-练习一
  • AX88179A千兆网卡芯片,支持switch联网
  • Pytorch个人学习记录总结 05
  • windows部署安装redis安装教程
  • Jmeter post请求传参问题
  • 对Windows应用程序进行代码签名
  • 2022 China Open Source Report
  • postgresql|数据库|启动数据库时报错:FATAL: could not map anonymous shared memory的解决
  • 数字签名与数字证书
  • 基于Jquery EasyUI JSZip FileSaver的简单使用
  • git远程一个分支对应本地两个分支推送
  • SpringCloud学习—Hystrix:服务熔断
  • 8款常用系统镜像烧录软件
  • 设计模式什么情况下适合使用呢?
  • Docker和K8s区别,使用场景,具体怎么使用以及详细命令
  • K8S集群创建和管理,以及常用命令
  • HarmonyOS/OpenHarmony元服务开发-卡片使用动效能力
  • 【FusionInsight HD】FusionInsight HD 651创建集群-Yarn
  • MQ, RocketMQ, 安装
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • 借助 Mybatis 的动态 SQL 解决传参不确定问题
  • 前端框架学习-Vue(一)
  • Elasticsearch Query DSL
  • 腾讯云 CODING × K+ 峰会再次携手开启软件行业新风向
  • 2023年发布的25个开源大型语言模型总结
  • Istio网关Gateway 启用TLS
  • slam建图与定位_cartographer代码阅读(7)后端约束构建
  • Android usb 配件模式通信示例
  • 【Hive实战】Hive的压缩池与锁