用法:
1 package com.wjq.enums;
2
3 // 用户状态
4 // 0:正常状态(已注册)
5 // 1:已被封号(已注册)
6 public enum UserState {
7 NORMAL(0), SEALED(1);
8
9 private final int value;
10
11 private UserState(int value) {
12 this.value = value;
13 }
14
15 public int getValue() {
16 return value;
17 }
18
19 public static void main(String[] args) {
20 // 输出结果是1
21 System.out.println(UserState.SEALED.getValue());
22 }
23 }
原理:
经过编译器编译后,枚举类变成抽象类,继承java.lang.Enum。枚举中定义的枚举常量,变成public static final属性,通过内部类来实现。同时,其类型是抽象类的类型,名字是枚举常量的名字,通过静态代码块来初始化枚举常量。不能通过克隆以及序列化和反序列化来复制枚举,保证一个枚举常量是单例。
参考资料