[超详细-Java进阶] 枚举类代替if-else

问题的背景是我要判断不同时段吃早餐还是晚餐,例如1的时候吃早餐,2的时候吃晚餐,3的时候。。这样下来容易嵌套很多层if-else,为了代码整洁,也是java进阶开发,我使用了枚举Enum

枚举类使用方法:

1、创建接口

首先使用枚举类创建一个公共接口 public interface TimeHourEnum,此类设定一个方法,即不同的时段吃什么餐,文本中设定两个枚举实例 Time1(早餐),Time2(晚餐)。

package fanshubo;

public interface TimeHourEnum {
    void eatAtTime();
}

2、实现接口

 需要创建一个枚举实现类来实现这两个枚举调用这同一个方法,实现不同的操作

package fanshubo;

import java.util.ArrayList;

public enum TimeHourEnumImpl implements TimeHourEnum{
        Time1(1){
                @Override
                public void eatAtTime() {
                        System.out.println("早餐");
                }
        },
        Time2(2){
                @Override
                public void eatAtTime() {
                        System.out.println("晚餐");
                }
        };

        private int i;

        TimeHourEnumImpl(int i) {
                this.i = i;
        }

        public static TimeHourEnumImpl getTimeHour(int i){
                for (TimeHourEnumImpl imply:TimeHourEnumImpl.values() ) {
                        if ( imply.i == i ) {
                                return imply;
                        }
                }
                return null;
        }

}

使用枚举类替换if-else在一般企业级开发中是最基本的事情,那么如何根据传参(传入1这个时间,就是早餐,传入2,就是晚餐呢?)来找到对应的枚举类呢?

注意是根据下面这个方法实现的,注意是static方法(后续外部方便调用),其中TimeHourEnumImpl.values()这个方法是获得所有的枚举类,然后直接进行一个for循环简单的判断就可以啦,如果传参的和枚举类的参一样,就会成功返回,也就是判断了1==“早餐”,2==“晚餐”。

  public static TimeHourEnumImpl getTimeHour(int i){
                for (TimeHourEnumImpl imply:TimeHourEnumImpl.values() ) {
                        if ( imply.i == i ) {
                                return imply;
                        }
                }
                return null;
        }

3、外部调用

最后在外部方法就可以不用ife-else判断了,而是使用如下方法调用

public static void main(String[] args) {
        TimeHourEnumImpl timeHourEnumImpl = TimeHourEnumImpl.getTimeHour(1);
        timeHourEnumImpl.eatAtTime();
}

4、运行结果

可以看到,传入的参数是1,运行结果也是“早餐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值