导读
最近项目中遇到对
pojo
类进行链式调用getter
方法获取属性问题,每一步getter
调用后都可能产生空指针,而在各个属性获取时,又不想干扰其他属性,即若没获取到则返回null
即可。显然,采用大段的if(obj.getXX != null)
来处理的话,可行但略显繁琐,而采取大段的try catch
来统一捕获异常的话,势必一个地方抛出异常,其他的属性获取也会受到影响,若是每个调用都被单独的try catch
处理,也会显得不够优雅
场景假设
假设有以下类及关系定义:
// @Data为lombok中的注解
@Data
class Address {
private String remark;
private Province province;
}
@Data
class Province {
private String provinceName;
private City city;
}
@Data
class City {
private String cityName;
private Town town;
}
@Data
class Town {
private String townName;
private Integer townSize;
}
当需要根据Address
对象获取townName
时,通常可以这样做:
/**
* 判断非null进行下一步
*/
public String getTownName(Address address) {
if (address != null) {
if (address.getProvince() != null) {
if (address.getProvince().getCity() != null) {
if (address.getProvince().getCity().getTown() != null) {
return address.getProvince().getCity().getTown().getTownName();
}
}
}
}
return null;
}
/**
* 判断为null则提前返回
*/
public String getTownName(Address address) {
if (address == null) {
return null;
}
if (address.getProvince() == null) {
return null;
}
if (address.getProvince().getCity() == null) {
return null;