Java - 9 个小技巧让你的 if else 看起来更优雅(三)

简介: Java - 9 个小技巧让你的 if else 看起来更优雅(三)

6、使用 Optional

从 JDK 1.8 开始引入 Optional 类,在 JDK 9 时对 Optional 类进行了改进,增加了 ifPresentOrElse() 方法,我们可以借助它,来消除 if else 的判断,使用如下。优化前代码:


String str = "java";
if (str == null) {
    System.out.println("Null");
} else {
    System.out.println(str);
}

优化后代码:

Optional<String> opt = Optional.of("java");
opt.ifPresentOrElse(v -> 
  System.out.println(v), () -> System.out.println("Null"));
  • 小贴士:注意运行版本,必须是 JDK 9+ 才行。

 

7、梳理优化判断逻辑

和第 4 点比较类似,我们可以通过分析 if else 的逻辑判断语义,写出更加易懂的代码,例如以下这个嵌套判断的优化。优化前代码:


// 年龄大于 18
if (age > 18) {
    // 工资大于 5000
    if (salary > 5000) {
        // 是否漂亮
        if (pretty == true) {
            return true;
        }
    }
}
return false;

优化后代码:

if (age < 18) {
    return false;
}
if (salary < 5000) {
    return false;
}
return pretty; 

我们需要尽量把表达式中的包含关系改为平行关系,这样代码可读性更高,逻辑更清晰。

8、使用多态

继承、封装和多态是 OOP(面向对象编程)的重要思想,本文我们使用多态的思想,提供一种去除 if else 方法。优化前代码:


Integer typeId = 0;
String type = "Name";
if ("Name".equals(type)) {
    typeId = 1;
} else if ("Age".equals(type)) {
    typeId = 2;
} else if ("Address".equals(type)) {
    typeId = 3;
}

使用多态,我们先定义一个接口,在接口中声明一个公共返回 typeId 的方法,在添加三个子类分别实现这三个子类,实现代码如下:


public interface IType {
    public Integer getType();
}
public class Name implements IType {
    @Override
    public Integer getType() {
        return 1;
    }
}
public class Age implements IType {
    @Override
    public Integer getType() {
        return 2;
    }
}
public class Address implements IType {
    @Override
    public Integer getType() {
        return 3;
    }
}
  • 注意:为了简便我们这里把类和接口放到了一个代码块中,在实际开发中应该分别创建一个接口和三个类分别存储。

此时,我们之前的 if else 判断就可以改为如下代码:    

IType itype = (IType) Class.forName("com.example." + type).newInstance();
Integer typeId = itype.getType();

有人可能会说,这样反而让代码更加复杂了,此可谓“杀鸡焉用宰牛刀”的典型范例了。这里作者只是提供一种实现思路和提供了一些简易版的代码,以供开发者在实际开发中,多一种思路和选择,具体用不用需要根据实际情况来定了。灵活变通,举一反三,才是开发的上乘心法。

目录
相关文章
|
4月前
|
Java Apache 开发者
Java常用的小技巧
这篇文章记录了Java开发中的一些常用小技巧,包括如何获取指定时间的时间戳、获取当前时间的时间戳、时间对象的格式化输出、使用Apache Commons Lang库中的`StringUtils`工具类来查找字符在字符串中的正数或倒数出现的位置、处理HTTP请求中因中文查询参数导致的问题,以及如何使用`BeanUtils`和`ReflectionUtils`来复制实体类属性值到视图类。文章提供了每个技巧对应的示例代码,以帮助开发者快速理解和应用这些技巧。
21 0
|
6月前
|
算法 Java 测试技术
滚雪球学Java(55):想让你的程序更有趣?加上这个Java的Random类的小技巧!
【6月更文挑战第9天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
44 2
滚雪球学Java(55):想让你的程序更有趣?加上这个Java的Random类的小技巧!
|
6月前
|
算法 Java 应用服务中间件
【Java】提高千倍效率的35个编码小技巧
【Java】提高千倍效率的35个编码小技巧
50 4
|
7月前
|
Java
Java中的if选择语句详解
Java中的if选择语句详解
103 1
|
6月前
|
Java
Java代码进行简化的小技巧
Java代码进行简化的小技巧
42 0
|
7月前
|
Java
Java程序设计基础——if条件语句
Java程序设计基础——if条件语句
|
7月前
|
Java 测试技术
Java一分钟之-控制流程:if条件语句与switch
【5月更文挑战第8天】本文探讨了Java编程中的`if`和`switch`控制流程语句,强调了常见问题和易错点。对于`if`语句,需注意使用大括号避免逻辑错误,完整比较操作,以及理解`&&`和`||`的短路行为。在`switch`语句中,要注意只能基于常量进行判断,每个`case`后应有`break`,并提供`default`分支。避免错误的策略包括始终使用大括号、确保清晰的条件、进行代码审查和编写单元测试。掌握这些要点对编写高效、可维护的代码至关重要。
67 0
Java一分钟之-控制流程:if条件语句与switch
Java中的条件语句:if语句和switch语句的作用与区别
Java中的条件语句:if语句和switch语句的作用与区别
288 0
|
7月前
|
Java
Java中if语句
Java中if语句
53 0
|
7月前
|
Java
idea小技巧——java版本一直变动
idea小技巧——java版本一直变动
201 1