使用关键字 enum
可以定义枚举类型,枚举类型可以包含一组序列集,可以作为常规的程序组件使用。当我们需要从固定的序列中获取值时,使用枚举类型是一个很好的方式。
基本特性
尽管 enum
看起来像是一个新的数据类型,但是这个关键字只是为 enum 生成对应的类时,产生某些编译器行为。 可以将 enum 当做其他任何类来处理。
创建 enum 时,编译器会自动生成一个对应的类,这个类会继承 java.lang.Enum
。
由此可知,枚举类型具有以下 特性 :
- enum 不能再继承。
- enum 可以使用 Enum类 的方法。
- enum 除了不能继承以外,基本可以看做一个常规的类。
除此之外,枚举类型还具有以下 特性 :
- enum 也不能被继承。
- enum 内可以定义一些序列,这些值实际上enum实例,默认是
public static final
。 - enum 需要提供和实例声明对应的构造函数,enum构造函数默认是
private
。
1 | package tk.gushizone.java.basic.enumeration; |
继承于 Enum的方法 | 说明 |
---|---|
ordinal() |
返回 enum实例 在声明时的次序。 |
name() |
返回 enum实例 在声明时的名字。 |
toString() |
默认与 name() 相同。 |
getDeclaringClass() |
获取 enum实例 所属的类类型。 |
1 | System.out.println(SimpleEnum.SUCCESS.ordinal()); |
1 | 0 |
与 name()
方法对应,也可以通过枚举的名字获取枚举类型。
方法 | 说明 |
---|---|
valueOf(Class<T> enumType, String name) |
通过枚举的名字获取枚举类型,可被继承的 static 方法。 |
valueOf(String name) |
通过枚举的名字获取枚举类型,由编译器添加。 |
1 | System.out.println(Enum.valueOf(SimpleEnum.class, "ERROR") == SimpleEnum.ERROR); |
1 | true |
添加属性和方法
一般枚举会用来定义数据字典,为了增加可用性,我们可以向枚举类型中添加属性和方法。
1 | package tk.gushizone.java.basic.enumeration; |
需要注意的是:
向枚举中添加属性和方法后,实例声明一定要使用
;
结尾。虽然当enum中只有实例时可以省略
;
的 ,但不推荐。实例声明实际上会调用构造方法,故需要提供对应的构造方法。
解析 values()
enum 提供了一个遍历的方法 values()
。
1 | for (DictCode item : DictCode.values()) { |
1 | SUCCESS: 成功0 |
实际上, values()
是编译器添加的静态方法,而不是继承自Enum。
如果我们想遍历Enum可以使用 Class类 的 getEnumConstants()
方法。
因为该方法来自 Class类,故也可用在没枚举类型上,但会报空指针异常。
1 | Enum e = DictCode.SUCCESS; |
1 | SUCCESS: 成功0 |