谢谢你留下时光匆匆
Java Enum类模版以及简单批注

最近在Java开发过程中,遇到了Enum类的使用与开发,这里对Java Enum类做一个简单整理,包括创建Enum类的一个模版,以及一些使用的简单批注,方便以后开发使用。

模版

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
enum Weekday {
    MON(1, "星期一"),  // 常量声明,注意这里是逗号 
    TUE(2, "星期二"),
    WED(3, "星期三"), 
    THU(4, "星期四"), 
    FRI(5, "星期五"), 
    SAT(6, "星期六"), 
    SUN(0, "星期日");  //  这里是分号

    public final int dayValue;
    private final String chinese;

    private Weekday(int dayValue, String chinese) {
        this.dayValue = dayValue;
        this.chinese = chinese;
    }

    @Override
    public String toString() {
        return this.chinese;
    }
}

该模版参考了枚举类 - 廖雪峰的官方网站

批注

Enum的使用场景

在开发过程中,有时候我们可能需要根据指定的情况构建相对应的处理,对于不同的情况,有不同的处理逻辑。这些情况可能是:根据用户的城市,推送相对应的天气预报;根据不同的策略,通过不同的公式计算返回值。对于这些情况,我们常常会写类似 if (variable == “some string”) 或者 if (variable == 1) 这样的判断,比如说 if (userCity == “Beijing”) 或者 if (strategy == 1)

但是这样有一个潜在的问题,无法保证设定的变量值在预期合理的范围内。例如 user_city 被设为 dejwin 无意义的字符串,或者strategy 被设置为 999 超出范围的值。

为了避免这样的问题,我们可以使用 Enum 枚举类,以满足相关变量的合理性。Enum 枚举类变量的取值范围只可能是创建类时候声明的取值。

字段

Enum 类可以添加相关字段,变量加上 final 修饰符,以满足唯一性。另外 Enum 类的构造方法需是 private 的,同样也是为了满足唯一性。

name()方法

通过 name() 方法可以获取 Enum 实例对应的名称。通常用大写加下划线定义 Enum 类的枚举对象, name() 方法返回的是这些定义的大写名称。

toString() 方法

toString() 默认返回与 name()方法相同的值。可以重写 toString() 方法或者可读性更强的字符串。

与switch条件语句一起配合使用

相较于其它原生变量类型, Enum 类变量是最符合 switch 条件判断场景的变量。下面给出了一个使用模版。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
switch(day) {
    case MON:
    case TUE:
    case WED:
    case THU:
    case FRI:
        System.out.println("Today is " + day + ". Work at office!");
        break;
    case SAT:
    case SUN:
        System.out.println("Today is " + day + ". Work at home!");
        break;
    default:
        throw new RuntimeException("cannot process " + day);
}