考虑以下POJO:
class Person {
private String name;
private Address address;
private UserProperties properties;
//getters, stetters, etc
}
class Adddress {
private String state;
private Street street;
private String country;
}
class Street {
private String line1;
private String line2;
}
class PersonAttributes {
private String nationality;
private String age;
}
所以场景是这样的:
例如:
if (person.getAddress() != null) {
//do an operation on address
if (person.getAddress().getStreet() != null) {
//do operation on street
}
}
对于属性和其他嵌套字段也是如此。
除了上述方法,还有其他选择可以降低复杂性并避免所有这些空检查吗?
我从REST API获取所有字段,并使用Jackson将其分配给POJO。
这种方法是否适用于高度嵌套的JSON结构,或者我应该使用其他选项?
问题来源:Stack Overflow
无法避免进行空检查。您可以稍微“美化”它们:
mport static java.util.Objects.*;
…
if( nonNull( person.getAddress ) )
{
if( nonNull( person.getAdddress().getStreet() ) )
{
…
}
}
您可以在顶级元素的更深层嵌套元素中为字段引入吸气剂:
class Person
{
…
public String getStreet()
{
var address = getAddress();
var retValue = isNull( address ) ? null : address.getStreet();
return retValue;
}
}
…
if( nonNull( person.getStreet() ) )
{
…
}
这样可以稍微减少顶层代码的混乱。
如果允许您更改获取器的返回类型,java.util.Optional
也可以选择使用:
class Person
{
…
public Optional<Address> getAddress()
{
return Optional.ofNullable( address );
}
public Optional<String> getStreet()
{
var retValue = getAddress().map( a -> getStreet() );
return retValue;
}
}
…
if( person.getStreet().isPresent() )
{
…
}
但是如上所述,逻辑基本保持不变,只是看起来有所不同。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。