1.1优点

(1)以枚举方式定义的常量使代码更具可读性。

(2)参数为枚举类型时,比常量具有更明确严谨的类型约束,一旦传入无效值,编译器就会帮我们检查,所以避免由于传入无效值而引起的意外行为。

(3)枚举在扩展性方面比普常量更方便、也更优雅。

        注意:swicth语句只支持char、int、Enum.

1.2基本用法

(1)定义枚举类:

java中枚举的valuesof java中枚举的优点_java

(2) ROLE_ROOT_ADMIN、ROLE_ORDER_ADMIN、ROLE_NORMAL均为枚举类的实例(比如这里,ROLE_ROOT_ADMIN是UserRole类的实例),总之它们是对象。Java中的每一个枚举都继承自java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是Enum类的实例(比如这里,ROLE_ROOT_ADMIN是UserRole类的实例),这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。

java中枚举的valuesof java中枚举的优点_java中枚举的valuesof_02

java中枚举的valuesof java中枚举的优点_enum_03

(3)枚举(Enum)类常用方法:

方法名称

描述

values()

以数组形式返回枚举类型的所有成员

valueOf()

将普通字符串转换为枚举实例

compareTo()

比较两个枚举成员在定义时的顺序

ordinal()

获取枚举成员的索引位置

(4)方法使用举例:

java中枚举的valuesof java中枚举的优点_Java 枚举_04

(5)switch-case:

java中枚举的valuesof java中枚举的优点_java_05

1.3自定义扩充枚举

上面展示的枚举例子非常简单,仅仅是单值的情形,而实际项目中用枚举往往是多值用法。比如,我想扩充一下上面的UserRole枚举,在里面加入 角色名—角色编码 的对应关系,这也是实际项目中常用的用法。这时候我们可以在枚举里自定义各种属性、构造函数、甚至各种方法

定义了属性之后,必须配套构造函数。另外,枚举成员声明时,括号里带构造函数的参数。

java中枚举的valuesof java中枚举的优点_Java 枚举_06

1.4枚举与接口

java中枚举的valuesof java中枚举的优点_java中枚举的valuesof_07

       

java中枚举的valuesof java中枚举的优点_枚举类型_08

       如上图的代码示例:对接口方法的实现有两种,一种是在枚举成员里实现,一种是在枚举类中实现(所有枚举成员共用)。一般非共性的东西才会用接口实现吧,所以一般是第一种情况,即写在枚举成员内部。然后第二种会被第一种覆盖。

1.5使用枚举摆脱if-else和switch

java中枚举的valuesof java中枚举的优点_枚举类型_09

java中枚举的valuesof java中枚举的优点_Java 枚举_10

1.6 枚举使用场景

1) 作为定义常量使用,具有更高的可读性,可用于switch-case

2) 多值常量,也就是利用枚举的构造函数

3) 在枚举中实现方法,以实现自己的业务逻辑。