zenith-docs 1.0.0 Help

枚举

从 Java5 开始提供了枚举的特性,枚举实际上是一类常量,表现形式是类,其存储的是一组常量。枚举改变了在代码中直接使用字面量或者属性值来表示常量的做法,为常量提供了统一的编写形式。

基本使用

在没有枚举类之前,我们定义常量如下形式:

public class TestWeek { public static final int MONDAY = 1; public static final int TUESDAY = 2; public static final int WEDNESDAY = 3; public static final int THURSDAY = 4; public static final int FRIDAY = 5; public static final int SATURDAY = 6; public static final int SUNDAY = 7; @Test public void testWeek() { System.out.println(TestWeek.MONDAY); } }

当我们使用了枚举类之后,同样的功能,写法就简单了很多:

public enum TestWeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

在很多时候,我们希望枚举的值并不是无意义的数值序号,而是有意义的单词:

public enum TestWeekEnum { MONDAY("MONDAY"), TUESDAY("TUESDAY"), WEDNESDAY("WEDNESDAY"), THURSDAY("THURSDAY"), FRIDAY("FRIDAY"), SATURDAY("SATURDAY"), SUNDAY("SUNDAY"), ; private final String value; TestWeekEnum(String value) { this.value = value; } public String value() { return this.value; } }

在 Java 中,枚举的语法是有一些奇怪的,它是一个受到限制的类。比如我们可以定义一个构造方法,但是可见性修饰必须是 private 。如果定义了构造方法,那么枚举值的定义也必须加入同样的参数,比如构造方法中的形参是 value, 那么枚举值就必须写成 MONDAY("MONDAY")这样的形式。所以,这个构造方法,包括属性,都是围绕着枚举值转的。

方法也一样,我们定义了一个名为 value() 的方法,那么每一个枚举值都会有这个 value() 的方法。

本质上,枚举类和其他的类并没有区别。在编译之后也会转换为正常形式的类,并且继承 java.lang.Enum 类。

获取所有的枚举值

有时候,我们需要获取枚举的所有的值。你可以通过 values 的方法:

TestWeekEnum.values();

有时候,你并不知道自己要操作的是什么类型的枚举,这时候可以借助泛型来获取任意类型的枚举的所有的属性:

public static <T extends Enum<T>> boolean inEnum(String value, Class<T> enumType) { List<String> all = EnumSet.allOf(enumType).stream().map(Enum::name) .collect(Collectors.toList()); return all.contains(value); }

上面的方法判断了给定的value 是否在 enumType 中包含。

Last modified: 04 August 2024