开发者社区> 问答> 正文

空检查增加代码中的认知复杂度

考虑以下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;
}

所以场景是这样的:

  1. 我无法控制POJO,它是预定义的结构。 任何字段都可以为空。
  2. 这只是一个示例,实际的POJO更为复杂和嵌套。
  3. 当我查询该字段时,我必须添加一个空检查以防止空指针异常。

例如:

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

展开
收起
montos 2020-03-21 20:38:07 1383 0
1 条回答
写回答
取消 提交回答
  • 无法避免进行空检查。您可以稍微“美化”它们:

    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

    2020-03-21 20:39:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
快速变化背景下,组织如何保持过程的稳定性 立即下载
快速变化背景下,组织如何保持过程的稳定性? 立即下载
改善弱网络-探索移动互联网下弱网络处理方式 立即下载