public Order getOrderInfo(String id){ Order order = orderService.getOrder(id); if (Objects.nonNull(order)){ UserInfo userInfo = userService.getUserInfo(order.getUserId()); if (Objects.nonNull(userInfo)){ Account account = accountService.getAccount(userInfo.getAccountId()); if (Objects.nonNull(account)) { order.setAccountName(account.getAccountName()); } } } return order; }我们可以改成这样:看起来是不是清爽多了
public Order getOrderInfo(String id) { // 堆代码 duidaima.com Order order = orderService.getOrder(id); if (Objects.isNull(order)) { return null; } UserInfo userInfo = userService.getUserInfo(order.getUserId()); if (Objects.isNull(userInfo)) { return order; } Account account = accountService.getAccount(userInfo.getAccountId()); if (Objects.nonNull(account)) { order.setAccountName(account.getAccountName()); } return order; }三.多使用空指针判断,能避免绝大数程序问题
原因:
1.省去外部的空对象判断逻辑
2.里面比较逻辑性能更高// 堆代码 duidaima.com public static boolean equals(CharSequence cs1, CharSequence cs2) { if (cs1 == cs2) { return true; } else if (cs1 != null && cs2 != null) { if (cs1.length() != cs2.length()) { return false; } else if (cs1 instanceof String && cs2 instanceof String) { return cs1.equals(cs2); } else { int length = cs1.length(); for(int i = 0; i < length; ++i) { if (cs1.charAt(i) != cs2.charAt(i)) { return false; } } return true; } } else { return false; } }五.如果if条件太复杂,建议抽成方法,去判断,或者定义一个变量
if(a!=null && b && c.equals("sss") && d && e){ do something... }上面的代码可以抽成这样
boolean flag = a!=null && b && c.equals("sss") && d && e; if(flag){ do something... }六.如果有大量if else 出现,可以考虑使用策略模式,仅适用于if里面的代码很多或复杂,不要滥用
public interface OrderStrategy { void doSomething(); String getType(); }.定义不同的策略实现策略接口
// 堆代码 duidaima.com public class JdOrderStrategy implements OrderStrategy{ @Override public void doSomething() { } @Override public String getType() { return "jd"; } } public class PddOrderStrategy implements OrderStrategy{ @Override public void doSomething() { } @Override public String getType() { return "pdd"; } } public class TbOrderStrategy implements OrderStrategy{ @Override public void doSomething() { } @Override public String getType() { return "tb"; } }.创建一个helper 去装载这些策略
@Service public class OrderStrategyHelper { private Map<String, OrderStrategy> orderStrategyMap; @Autowired public void setOrderStrategyMap(List<OrderStrategy> orderStrategyList) { if (CollectionUtils.isEmpty(orderStrategyList)) { throw new RuntimeException("没找到订单策略"); } orderStrategyMap = orderStrategyList.stream().collect(Collectors.toMap(item -> item.getType(), item -> item, (v1, v2) -> v1)); } public OrderStrategy getHandler(String type){ return orderStrategyMap.get(type); } }如何去用
orderStrategyHelper.getHandler("jd")七.如果有大量类型判断,建议将类型定义为枚举,便于维护