You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

读取事件时Location始终为null的票务系统问题求助

问题诊断与解决方案

嘿,我一眼就揪出问题的核心了——这完全是初始化顺序搞反导致的经典坑!

问题根源

看你TicketSystem里的readData()方法:

public void readData() { readEvents(); readLocations(); }

你先调用了readEvents()去创建Event对象,但Event的构造器里立刻就调用TicketSystem.getLocation(locationId)去获取位置。这时候locations这个HashMap还没被readLocations()填充啊!

你调试时看到locations里有数据,那是因为调试器是在所有初始化完成后查看的,但创建Event的那个瞬间,locations还是空的,自然拿不到对应的Location实例。

修复方案

把readData()里的调用顺序彻底反过来,先加载所有位置,再创建事件:

public void readData() {
    readLocations(); // 先把所有位置数据加载进locations HashMap
    readEvents();    // 再创建Event,此时getLocation就能正常拿到对应位置了
}

额外验证建议

你可以在Event构造器里加个临时调试代码确认一下:

public Event(...) {
    // ... 其他代码
    System.out.println("创建Event时,是否存在该位置?" + TicketSystem.locations.containsKey(locationId));
    setLocation(TicketSystem.getLocation(locationId));
}

运行后你会发现,原来的顺序下这个输出是false,调整顺序后就变成true了。

另外也可以快速检查下EventMapper里的data[5]是不是正确的locationId索引,避免因为索引错误拿到无效的ID,但核心问题肯定是初始化顺序的问题。

内容的提问来源于stack exchange,提问作者Cedric marx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:41