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

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";
    }

java规范(三)-----判空----方法内的为空判断的更多相关文章

  1. java list三种遍历方法性能比較

    从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便測试各种遍历方法的性能,測试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...

  2. java list三种遍历方法性能比较

    从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...

  3. Effective Java 第三版——43.方法引用优于lambda表达式

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  4. Java List /ArrayList 三种遍历方法

    java list三种遍历方法性能比较http://www.cnblogs.com/riskyer/p/3320357.html JAVA LIST 遍历http://blog.csdn.net/lo ...

  5. 2017.10.25 Java List /ArrayList 三种遍历方法

    java list三种遍历方法性能比较 学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入记录,然后遍历ArrayList,测试代码如下: pac ...

  6. Java 方法内联

    什么是Java 方法内联? 我们先来看看普遍的内联函数含义.在维基百科中解释为: 内联函数:在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函 ...

  7. Effective Java 第三版——10. 重写equals方法时遵守通用约定

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  8. (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

    selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...

  9. 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/19996629 开篇 在我的上一篇博客 深入理解Java中为什么内部类可以访问外部类的成 ...

随机推荐

  1. CentOS安装输入法及kDE桌面

    参考教程:https://jingyan.baidu.com/article/154b46317fdfce28ca8f419e.html

  2. win2003系统网络安装——基于linux+pxe+dhcp+tftp+samba+ris

    原文发表于:2010-09-16 转载至cu于:2012-07-21 一.原理简介 PXE(preboot execute environment)工作于Client/Server的网络模式,支持工作 ...

  3. [寒假学习笔记](一)Markdown语法学习

    Markdown 学习 在博客园上使用markdown编辑,记录学习进度,以来日可以复习 前期准备 1. 安装markdownpad2 官网直接找下载安装,遇到bug他会自动提示信息,跟着提示去安装一 ...

  4. 算法笔记(c++)--关于01背包的滚动数组

    算法笔记(c++)--关于01背包的滚动数组 关于01背包问题:基本方法我这篇写过了. https://www.cnblogs.com/DJC-BLOG/p/9416799.html 但是这里数组是N ...

  5. 请教Amazon FBA里面Label Service, Stickerless, Commingled Inventory是什么意思?

    Accept Label Service接受标签服务,选择了以后下面的操作中会有一个让您打印标签的流程,您就可以按照FBA流程提示进行每一步标签服务的操作. Accept Stickless, Com ...

  6. ES6的新特性(10)——Class 的基本语法

    Class 的基本语法 简介 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子. function Point(x, y) { this.x = x; this.y ...

  7. 作业2-MathExam V2.0

    MathExam V2.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 50 • ...

  8. 暑假App

    简介 实现了一个计时器APP,程序界面简洁,只有一个时间显示区域和两个图片按钮,一个按钮是开始/暂停,另一个按钮是停止. 功能介绍 一个显示界面,当最小计时单位为0.1秒时,显示为:分钟:秒:0.1秒 ...

  9. 0511团队项目2.0--产品product backlog

    介绍Scrum之product backlog Scrum的基本概念其实并不复杂,但是想做好并不容易,大家都知道product backlog的重要性,但是我们如何制定和展现它,如何评定优先级,如何进 ...

  10. [并查集] How Many Tables

    题目描述 Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants ...