再见if-else

再见if-else

前言:

想必大家都被大量if-else所困扰,如图
在这里插入图片描述

这样子看起来头都疼,,下面是我的解决方法

if-else的代码就不展示了,大家都知道,直接上最终代码

枚举类

public enum PlayEnum {
    NULL("") {
        @Override
        public String play() {
            return null;
        }
    },
    PHONE("PHONE") {
        @Override
        public String play() {
            return "phone";
        }
    },

    COMPUTER("COMPUTER") {
        @Override
        public String play() {
            return "computer";
        }
    };


    PlayEnum(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public PlayEnum getName(String name) {
        for (PlayEnum playEnum : PlayEnum.values()) {
            if (name.equals(playEnum.getName())) {
                return playEnum;
            }
        }
        return PlayEnum.NULL;
    }

    public abstract String play();
}
public class Test {
    public static void main(String[] args) {
        //玩手机还是电脑?
        String [] names  = new String[]{"PHONE","COMPUTER"} ;
        for (String name : names) {
            System.out.println(PlayEnum.NULL.getName(name).play());
        }

    }
}

输出结果
在这里插入图片描述
更新:
在这里插入图片描述
我发现了问题,是在枚举类中依然有if判断语句,如果判断数量过多,还是会有效率问题,于是我想到了解决方案
在这里插入图片描述
将所需要的枚举,存进map中,直接用map进行获取即可

import java.util.HashMap;
import java.util.Map;

public enum PlayEnum {
    NULL("") {
        @Override
        public String play() {
            return null;
        }
    },
    PHONE("PHONE") {
        @Override
        public String play() {
            return "phone";
        }
    },

    COMPUTER("COMPUTER") {
        @Override
        public String play() {
            return "computer";
        }
    };


    PlayEnum(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

   public static final Map<String,PlayEnum> playMap = new HashMap<>();

    static {
        playMap.put("NULL",NULL);
        playMap.put("PHONE",PHONE);
        playMap.put("COMPUTER",COMPUTER);

    }
    public PlayEnum getName(String name) {
        return playMap.get(name) == null ? PlayEnum.NULL :playMap.get(name);
    }

    public abstract String play();
}

核心想法就是

1. 在枚举类中创建一个抽象方法,如 play() 并使每个枚举都实现这个方法

2. 创建一个方法 如 getName(String name) 将参数与所有枚举进行比较

3. 最后根据参数名进行对应的方法

最后:

上述案例供参考,具体业务还是要根据自己需求来写

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子仪_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值