如果条件为false,则返回null

pbpqsu0x  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(468)

如果此函数的条件为false,则返回null值时出现问题:

private <Optional>ServiceElements getPrice(final ServiceRequest serviceRequest,
                                  final Date date,
                                  final Integer code) {
if (isNotAFilter(serviceRequest.getCustomerId(),
    serviceRequest.getStaffId()) {
  return custRepository.getCustData(date, code).stream().filter(e -> e.getPrice() != null).filter(e -> e.getPrice >=0)
    .findFirst();  
}
return null; 
}

private double calculate(final ServiceRequest serviceRequest) 
{
return getPrice(serviceRequest).get().getPrice(); 
}

java.lang.NullPointerException: null 调用时引发而不是返回null值 getPrice 方法。

ujv3wf0j

ujv3wf0j1#

if (isNotAFilter(serviceRequest.getCustomerId(),
    serviceRequest.getStaffId()) {
  price = custRepository.getCustData(date, code);
}

如果上述if条件的计算结果为false,则变量 pricenull . 然后你的返回语句抛出一个 NullPointerException .

okxuctiv

okxuctiv2#

为什么要考虑临时价格变量?

private ServiceElements getPrice(final ServiceRequest serviceRequest,
                                      final Date date,
                                      final Integer code) {
if (isNotAFilter(serviceRequest.getCustomerId(),
    serviceRequest.getStaffId()) {
  return custRepository.getCustData(date, code).stream().filter(e -> e.getPrice() != null).filter(e -> e.getPrice >=0)
    .findFirst().orElse(null);
}
return null 
}

顺便说一句,既然您已经在使用java的函数结构,那么imo的理解应该是:

private Optional<ServiceElements> getPrice(final ServiceRequest serviceRequest,
                                      final Date date,
                                      final Integer code) {
    if (isNotAFilter(serviceRequest.getCustomerId(),
        serviceRequest.getStaffId()) {
      return custRepository.getCustData(date, code).stream().filter(e -> e.getPrice() != null).filter(e -> e.getPrice >=0)
        .findFirst();
    }
    return Optional.empty(); 
}

这意味着您可以更容易地用管道将此函数与其他函数连接起来,而无需到处进行难看的空检查。也 .orElse(null) 是一种更复杂的 .get() .

相关问题