欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 第三章 告别if嵌套的多层判空语句

第三章 告别if嵌套的多层判空语句

2025/2/4 8:39:34 来源:https://blog.csdn.net/qushaming/article/details/143928460  浏览:    关键词:第三章 告别if嵌套的多层判空语句

目录

 

一、Optional优化多层嵌套if语句

二、if判空的两种写法


一、通过Optional优化多层嵌套if语句

package com.wzx;public class Test {/*** 获取某个订单的用户的详细地址的长度* @param orderId* @throws Exception*/public void getOrderDetailAddress(String orderId) throws Exception {Order order = getOrderDetail(orderId);int length = 0;if (order != null) {User user = order.getUser();if (user != null) {Address address = user.getAddress();if (address != null) {String detailAddress = address.getDetailAddress();if (!"".equals(detailAddress)) {length = detailAddress.length();}}}}}public Order getOrderDetail(String orderId) throws Exception {return new Order();}
}

我们在实际项目的开发过程中经常会看到这种多层嵌套的if非空判断语句,这种写法不管是从可读性、维护性、扩展性还是系统性能而言,都是非常艰难且具有挑战性的。对于这样的代码,自JDK 8开始,我们通过Optional就可以将它改善的非常简洁:

package com.wzx;import java.util.Optional;public class Test {/*** 获取某个订单的用户的详细地址的长度* @param orderId* @throws Exception*/public void getOrderDetailAddress(String orderId) throws Exception {Order order = getOrderDetail(orderId);int length = 0;if (order != null) {User user = order.getUser();if (user != null) {Address address = user.getAddress();if (address != null) {String detailAddress = address.getDetailAddress();if (!"".equals(detailAddress)) {length = detailAddress.length();}}}}}/*** 优化后的代码* @param orderId* @throws Exception*/public void getOrderDetailAddress2(String orderId) throws Exception {Order order = getOrderDetail(orderId);Integer length = Optional.ofNullable(order).map(Order::getUser).map(User::getAddress).map(Address::getDetailAddress).map(String::length)// 我们页可以选择.orElseThrow()抛出一个异常// 也可以选择.orElseGet()通过传入一个函数式接口来获取一个返回值.orElse(0);}public Order getOrderDetail(String orderId) throws Exception {return new Order();}
}

二、if判空的两种写法

不推荐:

public OrderDTO convert2(Order order) {if (order != null) {OrderDTO orderDTO = new OrderDTO();// todo return orderDTO;}return null;
}

推荐: 

public OrderDTO convert1(Order order) {if (order == null) {return null;}OrderDTO orderDTO = new OrderDTO();// todoreturn orderDTO;
}

我们在日常开发过程中,肯定见过上述两种写法的if判空语句,两种写法都能实现我们的业务逻辑非空判断。之所以推荐第二种写法,是因为通过这种提前判空回执,能够尽可能地减少代码嵌套的层级数,增加代码的可读性、可维护性和可扩展性。

public OrderDTO convert1(Order order) {if (order == null) {return null;}if (order.getUser() == null) {return null;}OrderDTO orderDTO = new OrderDTO();// todoreturn orderDTO;
}public OrderDTO convert2(Order order) {if (order != null) {OrderDTO orderDTO = new OrderDTO();if (order.getUser() != null) {return orderDTO;}}return null;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com