使用枚举代替if else和switch

使用枚举替代if else和switch

什么是枚举

枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性。创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类)。枚举类型符合通用模式Class Enum>,而E表示枚举类型的名称。枚举类型的每一个值都映射到protected Enum(String name,int ordinal)构造函数中,在这里,每个值的名称都转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

为什么要使用枚举替代if else和switch

在日常开发中,经常会根据不同条件做不同的操作,一般使用最多就是if else和switch,但是过多的判断逻辑和业务代码会导致代码可读性和可扩展性变差,如果后期想再多一个条件,又要多写一条else;这时候我们可以使用接口(interface)和枚举(Enum)的组合写出更加优美的代码。

public static String animal(String name){
    if ("cat".equals(name)){
        return "猫";
    }else if ("dog".equals(name)){
        return "狗";
    }else if ("pig".equals(name)){
        return "猪";
    }else {
        return "啥也不是";
    }
}
public static String animal(String name){
    switch (name){
        case "cat": return "猫";
        case "dog": return "狗";
        case "pig": return "猪";
        default: return "啥也不是";
    }
}

实现

先创建一个接口和一个枚举类,让这个枚举类实现这个接口
在接口中写一个抽象方法,因为枚举的每一项参数都是独立的,他们可以拥有自己的独立的构造,包括在实现接口时可以独立实现不同的功能

public interface AnimalApi {
	String animal();
}
public enum AnimalEnum implements AnimalApi{

    CAT("cat"){
        @Override
        public String animal() {
            return "猫";
        }
    },
    DOG("dog"){
        @Override
        public String animal() {
            return "狗";
        }
    },
    PIG("pig"){
        @Override
        public String animal() {
            return "猪";
        }
    },
    ;

    private String name;

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

    /**
     * 根据名称获取对应枚举类
     */
    public static AnimalEnum get(String name){
        for (AnimalEnum e : AnimalEnum.values()) {
            if (e.name.equals(name)){
                return e;
            }
        }
        return null;
    }
}

使用

在使用的时候只要使用get方法获取到对应的枚举类在使用 #animal 方法即可

public static void main(String[] args) {
    System.out.println(AnimalEnum.get("cat").animal());//猫
    System.out.println(AnimalEnum.get("dog").animal());//狗
    System.out.println(AnimalEnum.get("pig").animal());//猪
}
  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泽泽泽json

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

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

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

打赏作者

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

抵扣说明:

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

余额充值