天天看点

Java 去除难看的if-else

这阵子项目要使用的业务不可避免的要使用很多if-else,我知道东西写多了会很难看,所以想办法,并查阅了一些资料。

[这里是我查阅的资料,在它的基础上对代码进行修改](http://www.qingjingjie.com/blogs/8)

闲话不说,直接上代码

**注意:必须使用jdk8或以上版本**

1.首先创建一个animal类,只有一个成员
           
public class Animal {

    private String type;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

}
           

2.添加一个主类(Demo.java),这里编写核心代码

public class Demo {

    private static Map<String, Function<Animal, Boolean>> maps = new HashMap<String, Function<Animal, Boolean>>();

    static {
        //这里用到landa表达式,新特性。 其中 Cat,Dog 可以看成 if-else 中的条件
        maps.put("Cat", bean -> RunCase1(bean));
        maps.put("Dog", bean -> RunCase2(bean));
    }

    public static void main(String[] args) {

        Animal animal = new Animal();

        animal.setType("Dog");

        Iterator iterator = maps.entrySet().iterator();

        while (iterator.hasNext()) {

            Entry entry = (Entry) iterator.next();

            //本来有俩个if,现在变成一个,而且永远只有一个
            if (entry.getKey().toString().equals(animal.getType())) {
                Function<Animal, Boolean> f = (Function<Animal, Boolean>) entry.getValue();

                f.apply(animal);
            }

        }

    }

    private static Boolean RunCase2(Animal animal) {

        System.out.println("The " + animal.getType() + " say:" + "I am  dog !");
        return true;
    }

    private static Boolean RunCase1(Animal animal) {

        System.out.println("The " + animal.getType() + " say:" + "I am  cat !");
        return false;
    }

}
           

以上程序运行结果为:

The Dog say:I am dog !

如果有更好的方法或有问题的地方,麻烦大家留言,我也学习一下!