Java NullPointerException 检查链式方法

标签 java nullpointerexception null

我想在访问几个类深的字段(在 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,所以现在我必须检查它们是否有效。

是否有任何更短的方法可以像我想要的那样检查以上所有内容?

最佳答案

Java 8 Optional<>类,你可以map这样的值:

Optional.of(x)
    .map(ClassOfX::getLocation)
    .map(Location::getBuilding)
    .map(Building::getSolidFuelInd)
    .map(solidFuelInd -> solidFuelInd ? "Y" : "N")
    .ifPresent(pol::setWood_heat_ind);

map仅当可选值不是 null 时才会执行调用从而避免 NullPointerException . ifPresent的目的是调用你的setWood_heat_ind仅当一个值可用时。

一个很好的单次调用,相当于 null 检查。

关于Java NullPointerException 检查链式方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31457316/

相关文章:

database-design - 淹没在虚无的海洋中

javascript - Spring-Boot Controller 无法识别来自 ajax 的数据

java - 图像变换导致红色图像?

java - Z-Buffering 通常比 Painter 算法更快吗?

java - 我如何检查空指针异常

android - 下载图像在 2.3.3 中有效,但在 4.0 或 4.1 中无效

java - 这个NullPointerException从哪里来?

java - 如何根据点击的item改变listview的内容?

objective-c - 为什么 nilObject isEqual nilObject 返回 no?

c++ - 空引用 - C++ 标准中的位置