我想在访问几个类深的字段(在get方法链中)时检查空指针.但是,如果较早的方法之一为null,则无论如何都会得到NullPointerException.
这是我要检查的内容,尽管它仍然可以获取NullPointerException:
if(x.getLocation().getBuilding().getSolidFuelInd() != null)
pol.setWood_heat_ind(x.getLocation().getBuilding().getSolidFuelInd() ? "Y" : "N");
这是我希望上面的代码展示的行为:
if(x.getLocation() != null)
if(x.getLocation().getBuilding() != null)
if(x.getLocation().getBuilding().getSolidFuelInd() != null)
pol.setWood_heat_ind(x.getLocation().getBuilding().getSolidFuelInd() ? "Y" : "N");
pol上的字段是可选的,并且仅当以上getter不为null时才应设置.但是,建筑物和位置对象也可以为null,因此现在我必须检查它们是否有效.
有没有像我想要的那样检查上述所有内容的更短方法?
解决方法:
如果需要减少代码,则可以将每个调用保存在变量中.
// note: Replace type with the correct type
type location = x.getLocation();
type building = location == null ? null : location.getBuilding();
// note: you don't have to check for null on primitive types
pol.setWood_heat_ind(building != null && building.getSolidFuelInd() ? "Y" : "N");
这更清洁,更容易遵循.
值得深思的是,您不需要在原始类型boolean,int,byte等上检查是否为null,因此不需要对building.getSolidFuelInd()进行最后的null检查