如何通过Country对象获取城市名称?getCity()返回null问题排查
嘿,我来帮你搞定这个问题!你现在碰到的情况是调用country.getCity().getCityName()时出问题,因为country.getCity()返回了null,但单独调用city.getCityName()和country.getCountry()都正常,对吧?这核心原因就是你的Country对象里的city属性根本没被正确赋值或者初始化!
问题根源
Java里的对象引用类型(比如你这里的City),如果没有手动赋值,默认值就是null。看你贴的Country类代码,里面的private City city;只是声明了这个成员变量,但没有给它赋初始值,也没在构造方法里初始化。所以你创建Country对象后,如果没调用setCity()方法把已经准备好的City实例传进去,getCity()自然就返回null了。
具体解决方案
我给你几个可行的解决办法,你根据自己的场景选:
1. 手动给Country对象设置已初始化的City实例
既然你说city.getCityName()能正常执行,说明你已经有一个可用的City对象了。那只要把这个City对象通过setCity()方法赋值给Country就行:
// 假设你已经有一个初始化好的City对象 City myCity = new City(); myCity.setCityName("上海"); // 这里调用City的set方法设置城市名 // 创建Country对象并关联City Country myCountry = new Country(); myCountry.setCountry("中国"); myCountry.setCity(myCity); // 关键一步!把City对象绑定到Country上 // 现在就能正常调用了 String cityName = myCountry.getCity().getCityName();
2. 在Country的构造方法里初始化City
如果你希望Country对象创建时就自带一个City实例(哪怕是空的,也不会返回null),可以给Country加个无参构造方法,在里面初始化city:
public class Main { class Country { private String countryName; private City city; // 新增构造方法,初始化city为新的City对象 public Country() { this.city = new City(); } public String getCountry(){ return countryName; } public void setCountry(String countryName){ this.countryName = countryName; } public City getCity(){ return city; } public void setCity(City city){ this.city = city; } // 其他方法... } class City { private String cityName; public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } } }
这样哪怕你没调用setCity(),getCity()也会返回一个新的City对象,后续调用getCityName()就不会因为null报错了(当然如果没给City设置名称,会返回null,但至少不会触发空指针异常)。
3. 检查是否有意外把city设为null的情况
有时候可能在代码的某个地方不小心调用了country.setCity(null),这也会导致getCity()返回null。可以排查一下你的代码,看看有没有这类操作。
内容的提问来源于stack exchange,提问作者Utheks

