Java 枚举类的简单介绍

综述

  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到了吗?欢迎点赞留言!

Reference

posted @ 2022-10-16 16:21  楼兰胡杨  阅读(179)  评论(0编辑  收藏  举报