Java中的枚举类型


enum关键字是一个看似很小的特性。使用这个关键字,我们可以创建一个枚举类型。

事实上,在使用enum关键字创建新的枚举类型时,其实是创建了一个java.lang.Enum 类的子类。枚举中每个指定的值都可以看做是该类的一个实例。

不过我们并不需要在意枚举的本质,只需要将它当做一种创建数据类型的方式,然后可以将获得的类型直接使用即可。

在项目开发过程中,我们经常需会用到一些常量,比如某个属性的一组可能值等。我们不建议在程序中直接判断常量的值(这样容易出错,而且需要开发人员记住每个常量的精确值)。可以使用枚举类型来保存一组不变的值。

  1. public enum State{  
  2.     ACTIVE, CLOSED  
  3. }  

枚举还有一个非常实用的特性,即应用在switch语句中。这使程序的可读性大大提高。

  1. State currentState=State.ACTIVE;    
  2. switch (currentState) {   
  3.     case ACTIVE:   
  4.         //blabla   
  5.         break;   
  6.     case CLOSED:   
  7.         //blabla    
  8.         break;   
  9. }   

我们可以在枚举类中添加各种变量和方法,或者覆盖一个方法(比如toString())。

  1. public enum State{  
  2.     ACTIVE("Active",1), CLOSED("Closed",0);  
  3.     //成员变量、构造方法、get/set方法、覆盖方法等       
  4. }  

EnumMap 和 EnumSet这两个类使我们可以更加方便的处理枚举类型。

EnumMap 类是 java.util.Map 接口的一个特殊实现,该接口中的key是一个枚举类型。

  1. Map<State, Integer> map = new EnumMap<State, Integer>(State.class);  
  2. map.put(State.ACTIVE, 1);  

EnumSet 类则实现了 java.util.Set 接口,该接口保存了一种枚举类型的值的集合,我们可以使用它来保存一组特性/属性值。EnumSet使我们可以向操作其他Set对象一样操作一组枚举。

相关内容