高级语言中枚举(类)的用法

176 阅读2分钟

本文已参与「博主入驻有礼」活动, 一起开启掘金创作之路。

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。

JAVA枚举

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
每个枚举都是通过内部类实现的,且所有的枚举值都是 public static final 的。可通过类名.属性名访问,可用增强型for循环遍历,可用switch语句枚举。

  • 类似单例模式的思想,不过更像是一组“常量”,不可更改属性。
    枚举类 Color 转化在内部类实现:
class Color
{
     public static final Color RED = new Color();
     public static final Color BLUE = new Color();
     public static final Color GREEN = new Color();
}

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值(返回一个当前枚举类的数组)
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样,下标从零开始。
  • valueOf(String)方法返回指定字符串值的枚举常量。
    在Ruo-Yi中的应用:
public enum UserStatus
{
    OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");

    private final String code;
    private final String info;

    UserStatus(String code, String info)
    {
        this.code = code;
        this.info = info;
    }

    public String getCode()
    {
        return code;
    }

    public String getInfo()
    {
        return info;
    }
}

一个枚举类中的枚举值(成员)都是和自己一个类型的,所以OK、DISABLE也是UserStatus类型的,可以直接调用构造函数赋值。

Java1中还有一个Enumeration接口,是集合类的一种,使用方法同迭代器相同,后来被迭代器取代

作用:枚举是为了定义一组固定在某一范围的常量,是比手动定义常量更方便的方式。