Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证null和set数据的最佳实践_Java - Fatal编程技术网

Java 验证null和set数据的最佳实践

Java 验证null和set数据的最佳实践,java,Java,我有这段代码,检查null条件并设置如下所示的数据 public EmployeeVO buildEmpVO(EmpInfo empInfo) { EmployeeVO empVo = new EmployeeVO(); if(empInfo.getEmpObject()!=null) { empVo.setLength(empInfo.getEmpObject().getMonths()); }

我有这段代码,检查null条件并设置如下所示的数据

public EmployeeVO  buildEmpVO(EmpInfo empInfo) {
        EmployeeVO empVo = new EmployeeVO();
        if(empInfo.getEmpObject()!=null)
        {
        empVo.setLength(empInfo.getEmpObject().getMonths());
        }
        else
        {
            empVo.setLength(0);
        }
        
        return empVo;
    }

此代码有效,但无论如何,代码还是可以改进的。

让代码更易于阅读的一种方法是定义一个变量来保存employee对象:

public EmployeeVO buildEmpVO(EmpInfo empInfo) {
    EmployeeVO empVo = new EmployeeVO();
    EmpObject eo = empInfo.getEmpObject();

    if (eo != null) {
        empVo.setLength(eo.getMonths());
    }
    else {
        empVo.setLength(0);
    }
    
    return empVo;
}

请注意,我没有向方法本身添加对输入
empInfo
的检查。您可能还需要检查这种可能性。

如果您使用的是java 8,那么您可以使用可选选项缩短代码

  public EmployeeVO  buildEmpVO(EmpInfo empInfo) {
    EmployeeVO empVo = new EmployeeVO();
    Optional.of(empInfo.getEmpObject()).ifPresentOrElse(empObject -> empVo.setLength(empObject.getMonths()),
        () -> empVo.setLength(0));
    return empVo;
  }

但是这和您使用的方法一样好。

我将使用
可选的
来完成该任务(假设
getMonths()
返回
int
):

或者,如果您喜欢一行:

empVo.setLength(Optional.ofNullable(empInfo.getEmpObject()).map(empObj -> empObj.getMonths()).orElse(0));

请,被否决的用户可以添加评论来解释原因。从我的错误中吸取教训是非常有用的。这可能是因为你回答了一个离题的问题。这个问题主要是基于观点的,而且过于宽泛。你的情况会更好。这可能是你否决某个问题而不是答案的理由。另一方面,谁说这是离题的?我的回答是一个开放的问题。问题总是从开放开始,直到社区关闭。这并不意味着,尽管它们是开放的,但它们并没有偏离主题。他们只是还没关门。帮助中心指出哪些问题是主题内的,哪些是主题外的。从这里开始:“再次,这可能是否决某个问题而不是答案的理由。在结束之前,你的观点仍然是正确的。我并不是说你错了,但是,如果这是一门精确的科学来决定什么是离题,那么机器人将完成这项工作,而不是用户投票。
empVo.setLength(empInfo.getEmpObject().getMonths()!=null?empInfo.getEmpObject().getMonths():0)可能使用一个。老实说,我认为你的书更容易读。
empVo.setLength(Optional.ofNullable(empInfo.getEmpObject()).map(empObj -> empObj.getMonths()).orElse(0));