enum关键字是一个看似很小的特性。使用这个关键字,我们可以创建一个枚举类型。
事实上,在使用enum关键字创建新的枚举类型时,其实是创建了一个java.lang.Enum 类的子类。枚举中每个指定的值都可以看做是该类的一个实例。
不过我们并不需要在意枚举的本质,只需要将它当做一种创建数据类型的方式,然后可以将获得的类型直接使用即可。
在项目开发过程中,我们经常需会用到一些常量,比如某个属性的一组可能值等。我们不建议在程序中直接判断常量的值(这样容易出错,而且需要开发人员记住每个常量的精确值)。可以使用枚举类型来保存一组不变的值。
public enum State{ ACTIVE, CLOSED }枚举还有一个非常实用的特性,即应用在switch语句中。这使程序的可读性大大提高。
State currentState=State.ACTIVE; switch (currentState) { case ACTIVE: //blabla break; case CLOSED: //blabla break; }我们可以在枚举类中添加各种变量和方法,或者覆盖一个方法(比如toString())。
public enum State{ ACTIVE("Active",1), CLOSED("Closed",0); //成员变量、构造方法、get/set方法、覆盖方法等 }
EnumMap 和 EnumSet这两个类使我们可以更加方便的处理枚举类型。
EnumMap 类是 java.util.Map 接口的一个特殊实现,该接口中的key是一个枚举类型。
Map<State, Integer> map = new EnumMap<State, Integer>(State.class); map.put(State.ACTIVE, 1);
EnumSet 类则实现了 java.util.Set 接口,该接口保存了一种枚举类型的值的集合,我们可以使用它来保存一组特性/属性值。EnumSet使我们可以向操作其他Set对象一样操作一组枚举。