综述
enum
的全称为 enumeration, 是Java1.5引入的新特性,通过关键字enum来定义枚举类。它是一种特殊类,和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类。
优点:将常量组织起来,统一管理。
典型应用场景:错误码、状态机、常量值是否符合约定等,避免使用繁杂的if-else语句。
对于业务开发来说,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性,而且代码显得很low,此时,就需要使用枚举类了。
枚举实现接口
为了判断业务端传入的一个值(例如,星期几)是否符合约定的值,我们通过实现接口来查询此值是否在枚举类中存在,若存在,则是符合约定;否则,可以忽略本次请求。
private static void getWeekRemark(Integer id) {
String remark = WeekEnum.getRemarkById(id);
if (StringUtils.isBlank(remark)) {
System.out.println("id = " + id + " 是一个不符合约定的值,请检查!");
} else {
System.out.println("remark的值是 " + remark);
}
}
其中,星期枚举类的定义如下:
import java.util.Arrays;
/**
* @Author Wiener
* @Date 2022-10-16
* @Description: 星期枚举类
*/
public enum WeekEnum {
SUNDAY(0, "星期日"),
MONDAY(1, "星期一"),
TUESDAY(2, "星期二"),
WEDNESDAY(3, "星期三"),
THURSDAY(4, "星期四"),
FRIDAY(5, "星期五"),
SATURDAY(6, "星期六"),
DEFAULT(7, "");
private Integer id;
private String remark;
public Integer getId() {
return id;
}
public String getRemark() {
return remark;
}
WeekEnum(Integer id, String remark) {
this.id = id;
this.remark = remark;
}
public static String getRemarkById(Integer id) {
// values()返回枚举类中所有的值,如MONDAY、FRIDAY
return Arrays.stream(WeekEnum.values()).filter(e ->
e.getId().equals(id)).findAny().orElse(DEFAULT).getRemark();
}
}
方法getRemarkById中使用了values()
方法,用以返回 enum 实例的数组,而且此数组中的元素与 enum 中声明时的顺序一致。
如果传入的id不是0到6的正整数,getRemarkById的返回值是空字符串,说明id的值不符合约定,直接忽略本次请求即可。
枚举类的此功能是不是比写一堆if-else给力?老铁,GET到了吗?欢迎点赞留言!