gpt4 book ai didi

Java NullPointerException 检查链式方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:02 25 4
gpt4 key购买 nike

我想在访问几个类深的字段(在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com