Java 8中使用Optional简化异常处理与空值判断的问题
用Java 8 Optional简化代码的单行实现
场景1:判断ResponseEntity的body为空则抛异常,否则返回body中property的空安全值
直接通过Optional链式调用实现空判断、异常抛出和空安全取值,单行代码如下:
return Optional.ofNullable(responseEntity.getBody()).orElseThrow(CustomResponseException::new).getProperty();
如果getProperty()可能返回null,需要更严格的空安全处理,可调整为:
return Optional.ofNullable(responseEntity.getBody()).map(body -> Optional.ofNullable(body.getProperty()).orElse(null)).orElseThrow(CustomResponseException::new);
逻辑说明:
Optional.ofNullable(responseEntity.getBody())包装body,处理null情况orElseThrow(CustomResponseException::new):若body为空则抛出指定异常- 后续
map和orElse确保property的空安全返回
场景2:判断responseEntity非空且body为空时抛异常,捕获后存入mapExceptions
利用Optional过滤符合条件的responseEntity,结合try-catch实现单行逻辑:
try { Optional.ofNullable(responseEntity).filter(re -> re.getBody() == null).ifPresent(re -> { throw new CustomResponseException(); }); } catch (CustomResponseException e) { mapExceptions.put("targetKey", e); }
逻辑说明:
Optional.ofNullable(responseEntity)处理responseEntity本身为null的情况filter(re -> re.getBody() == null)筛选出body为空的非null responseEntityifPresent中触发异常抛出,外层catch捕获后将异常存入指定map
内容的提问来源于stack exchange,提问作者joseluisbz
相关产品推荐
相关产品推荐

