问题的背景是我要判断不同时段吃早餐还是晚餐,例如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,运行结果也是“早餐