Board logo

标题: java规范(三)-----判空----方法内的为空判断 [打印本页]

作者: look_w    时间: 2019-5-11 14:24     标题: java规范(三)-----判空----方法内的为空判断

一般我们判空或者有判断条件时 都是使用

if(条件成立){

执行代码

}

这样的逻辑。

但是如果对象的字段很深层次时或者条件很多时就容易形成很多个{}的情况,这样就容易分不出哪个花括号属于哪部分。如下:

if(条件1成立){
if(条件2成立){
if(条件3成立){
if(条件4成立){
执行代码
}
}
}
}

我们可以返过来判断

if(条件1不成立){
return;
}
if(条件2不成立){
return;
}
if(条件3不成立){
return;
}
if(条件4不成立){
return;
}
执行代码;


这样逻辑层次就清晰些。


实际代码优化例子:

优化前

        public String updateOrderDateTime() {
            List<Order> orders = orderReposity.getAllObjects(Order.class);
            if (orders != null && orders.size() > 0) {
                for (Order order : orders) {
                    OrderStatus orderStatus = order.getOrderStatus();
                    if (orderStatus != null) {
                        HistoryStatus current = orderStatus.getCurrent();
                        if (current != null) {
                            current.setDatetime(current.getDatetime());
                        }
                        List<HistoryStatus> historyStatuss = orderStatus
                                .getHistory();
                        for (HistoryStatus historyStatus : historyStatuss) {
                            historyStatus.setDatetime(historyStatus.getDatetime());
                        }
                    }
                    orderReposity.deleteObject(Order.class, order.getId());
                    orderReposity.saveObject(order);
                }
            }
            return "ok";
        }


优化后能减少花括号的嵌套程度

        public String updateOrderDateTime() {
            List<Order> orders = orderReposity.getAllObjects(Order.class);
            if (orders == null || orders.size()==0) {
            return "ok";
            }
                for (Order order : orders) {
                    OrderStatus orderStatus = order.getOrderStatus();
                    if (orderStatus == null) {
                     continue;
                    }
                    HistoryStatus current = orderStatus.getCurrent();
                    if (current == null) {
                        continue;  
                    }
                    current.setDatetime(current.getDatetime());
                       
                    List<HistoryStatus> historyStatuss = orderStatus
                                .getHistory();
                    for (HistoryStatus historyStatus : historyStatuss) {
                            historyStatus.setDatetime(historyStatus.getDatetime());
                    }               
                    orderReposity.deleteObject(Order.class, order.getId());
                    orderReposity.saveObject(order);
                }      
            return "ok";
        }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0