枚举的方法
枚举类 和 枚举类型混淆
如下代码所示,AuditType是枚举类,AuditType中定义的PURCHASE、TENDER等是枚举类型。
- values()获取枚举类下所有的枚举类型,返回一个枚举类型的数组
- valueof()通过枚举的名字获取一个枚举类型。如果不存在给定名字的枚举类型,会抛出异常java.lang.IllegalArgumentException: No enum constant enumeration.AuditType.PURCHASE1
- name()获取枚举类型的名称,与toString方法效果相同
- ordinal()返回一个int值,代表枚举类型在声明时的次序
1 | public enum AuditType { |
小小知识点
- 枚举默认继承了Enum类,并实现了Serializalbe和Comparable接口。所以它具有CompareTo()方法
- 编译器会提供equals()和hashcode()方法,所以枚举可以通过equals或==来进行比较
- 枚举类必须在定于方法和属性之前定义枚举类型,否则在编译时就会报错
- 枚举类的构造方法默认就是private的
- 只能在枚举类内部使用构造函数,也就是说不能通过构造器传参给枚举类
- 在Switch中使用枚举类型,可以直接使用枚举类型。比如使用PURCHASE而不是AuditType.PURCHASE
- values()方法是编译器添加的static方法,在Enum类中并没有。如果向上转型为Enum类型,不能使用values()方法,可以通过Class的getEnumConstants()方法获取所有的枚举类型
- valueOf()方法也是编译器添加的static方法,虽然在Ecum类中有valueOf方法,但它是两个参数的,而枚举类的ValueOf()是一个参数的
- Enum类实现了Serializalbe和Comparable接口
- 枚举类被final修饰,无法被继承
Enum的“values”方法
1 | Enum e = AuditType.PURCHASE; |