消除if...else的方法

在项目实际开发中使用if...else判断的场景非常多,上面只是其中几种场景。下面再列举一下,其他常见的场景。
1.根据不同的数字返回不同的字符串

  public String getMessage(int code) {
        if (code == 1) {
            return "成功!";
        } else if (code == -1) {
            return "失败!";
        } else if (code == -2) {
            return "网络超时!";
        } else if (code == -3) {
            return "参数错误!";
        }
        throw new RuntimeException("code异常!");
    }

使用枚举可以轻松替换掉上面那段代码


public enum MessageEnum {

    SUCCESS(1, "成功!"),
    FAIL(-1, "失败!"),
    TIME_OUT(-2, "网络超时!"),
    PARAM_ERROR(-3, "参数错误!");

    private int code;
    private String message;

    MessageEnum(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return this.code;
    }

    public String getMessage() {
        return this.message;
    }

    //jdk1.8的写法
    public static MessageEnum getMessageEnum(int code) {
        return Arrays.stream(MessageEnum.values()).filter(x -> x.code == code).findFirst().orElse(null);
    }

  //jdk1.8以下MessageEnum办法的写法 
/*
    public static MessageEnum getMessageEnum(int code) {
        for (MessageEnum messageEnum : MessageEnum.values()) {
            if (code == messageEnum.code) {
                return messageEnum;
            }
        }
        return null;
    }
    */
}

调用方法

public String getMessage(int code) {
    MessageEnum messageEnum = MessageEnum.getMessageEnum(code);
    return messageEnum.getMessage();
}

三目运算符替换简单判断

例如这种简单的if判断方法

public String getMessage2(int code) {
    if(code == 1) {
        return  "成功";
    }
    return "失败";
}

替换为三目运算符

public String getMessage2(int code) {
    return code == 1 ? "成功" : "失败";
}

判断是否为null

java中自从有了null之后,很多地方都要判断实例是否为null,不然可能会出现NPE的异常。

 public String getMessage7(int code) {
      return code == 1 ? "成功" : "失败";
  }

  public String getMessage3(int code) {
      Test test = null;
          return test.getMessage2(1);
  }

如果这段代码不判断异常,运行时就会出现java.lang.NullPointerException异常,所以我们平时都要提前判断一下

public String getMessage8(int code) {
    Test test = null;
    if (test != null) {
        return test.getMessage2(1);
    }
    return null;
}

Optional解决空指针问题

Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。
从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。
本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。

可以使用Optional来解决空指针异常问题

public String getMessage8(int code) {
    Test test = null;
    Optional<Test> testOptional = Optional.of(test);
    return testOptional.isPresent() ? testOptional.get().getMessage2(1) : null;
}

Last modification:December 9, 2020
如果觉得这篇技术文章对你有用,请随意赞赏