gpt4 book ai didi

java - 嵌套对象空值检查

转载 作者:行者123 更新时间:2023-12-02 11:07:54 26 4
gpt4 key购买 nike

我知道如何检查 NullPointerException 的嵌套对象的多种方法,对于 Java 8,最简单的是应用 Optional<param> 。或者使用简单的 if 代码,例如

if(foo.bar() != null && foo.getBar().getObject()!=null){
foo.getBar().getObject().getWhatever();
}

我的问题是有没有一种简单的方法可以在不知道内部类/方法的名称的情况下在一个方法中做到这一点

更清楚地说,我有一个像这样的代码

contract.getContactInfo().getPosition()
contract.getEntitledPerson().getEmail()

我想做这样的例子

excel.setCell(name1,contract.getContactInfo().getPosition());
excel.setCell(name2,contract.getEntitledPerson().getEmail());

如果它只用于 2 个嵌套对象或仅 2 个 setter,那很好,但如果它用于 50 个 Excel 单元格,有时有 5 或 6 个嵌套对象,那么这样做真是一场噩梦

比如 setCell 方法

public setCell(String name,Object object){
return object; // make sure no nested object is null
}

我希望我的问题足够清楚。请记住,我不能简单地更改嵌套对象,因为它是遗留代码并在很多地方使用!有什么想法吗?

最佳答案

正如您在问题中提到的那样,请使用可选,但它的长度更长。

excel.setCell(name1, Optional.of(contract).map(Contract::getContactInfo).map(ContactInfo::getPosition).orElse(null));
excel.setCell(name2, Optional.of(contract).map(Contract::getEntitledPerson).map(Person::getEmail).orElse(null));

采用如下格式更容易阅读:

excel.setCell(name1, Optional.of(contract)
.map(Contract::getContactInfo)
.map(ContactInfo::getPosition)
.orElse(null));
excel.setCell(name2, Optional.of(contract)
.map(Contract::getEntitledPerson)
.map(Person::getEmail)
.orElse(null));

如果您的目标是最小的代码,您可以捕获NullPointerException。在我看来,这有点像黑客,但它会起作用。

首先,一个辅助方法:

public static <T> T nullGuard(Supplier<T> supplier) {
try {
return supplier.get();
} catch (@SuppressWarnings("unused") NullPointerException ignored) {
return null;
}
}

然后你包装有问题的表达式:

excel.setCell(name1, nullGuard(() -> contract.getContactInfo().getPosition()));
excel.setCell(name2, nullGuard(() -> contract.getEntitledPerson().getEmail()));

关于java - 嵌套对象空值检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50800955/

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