# 介绍

JDK1.5之后新增enum关键字,用于定义枚举类型

enum Color {
    RED, BLUE;  // 通常使用大写定义枚举量
}
1
2
3

# Enum类

使用enum关键字创建的枚举类型,在编译时会由编译器自动生成一个类,该类继承java.lang.Enum抽象类

/*
 * 由编译器生成的Color枚举类
 * 部分代码
 */
final class Color extends Enum {
    // 私有构造方法,用于创建枚举类型和序号
    private Color(String s, int i) {
        super(s, i);
    }

    public static final Color RED;
    public static final Color BLUE;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 常见方法

Color color = Color.RED;

color.name();                   // <String> 返回枚举量的名称
color.ordinal();                // <int> 返回枚举量的序数
color.compareTo(Color.BLUE);    // <int> 实际上比较的是ordinal大小

Color.valueOf("RED");           // <Color> 根据名称获取枚举变量
Color.values();                 // <Color[]> 返回可枚举值的数组
1
2
3
4
5
6
7
8

# 进阶使用

由于枚举类型本质上是继承了Enum的一个类,因此可以当作常规类进行拓展

  • 添加属性和方法
  • 方法覆写
  • 实现接口
enum Color {
    RED("红"), 
    BLUE("蓝");

    // 其他结构必须放在枚举量声明之后
    private String desc;           // 增加一个描述

    private Color (String desc) {  // 添加构造方法,私有构造
        this.desc = desc;
    }
    public String getDesc() {      // 添加方法
        return desc;
    }
    @Override
    public String toString() {     // 方法覆写
        return desc;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 参考

[1] 阿里云大学 | 李兴华 - Java语言基础 (opens new window)

[2] 深入理解Java枚举类型(enum) (opens new window)

Last Updated: 7/1/2020, 2:19:02 AM