枚举

Java枚举

按照我现在的理解,枚举就是静态的单例的类的集合。

枚举的定义

public enum Grade {
  A, B, C, D, F, INCOMPLETE
};

Grade.A...等相当于就是静态的单例的类

遍历枚举的值

public void listGradeValues(PrintStream out) throws IOException {
  for (Grade g : Grade.values()) {
    out.println("Allowed value: '" + g + "'");
  }
}

枚举可以有构造方法

这时类名的定义和方法之间要用分号分开

public enum NewsRSSFeedEnum { 
   YAHOO_TOP_STORIES("<a href="http://rss.news.yahoo.com/rss/topstories"><code>http://rss.news.yahoo.com/rss/topstories</code></a>"), 

   CBS_TOP_STORIES("<a href="http://feeds.cbsnews.com/CBSNewsMain?format=xml"><code>http://feeds.cbsnews.com/CBSNewsMain?format=xml</code></a>"), 

   LATIMES_TOP_STORIES("<a href="http://feeds.latimes.com/latimes/news?format=xml"><code>http://feeds.latimes.com/latimes/news?format=xml</code></a>"); 

   private String rss_url; 

   private NewsRSSFeedEnum(String rss) { 
       this.rss_url = rss; 
   } 

   public String getRssURL() { 
       return this.rss_url; 
   } 
}

EnumSet和EnumMap

EnumSet 类提供一个静态方法 range 让迭代很容易完成:

for(WeekDayEnum day : EnumSet.range(WeekDayEnum.Mon, WeekDayEnum.Fri)) { 
    System.out.println(day); 
}

EnumMap 也是一个高性能的 Map 接口实现,用来管理使用枚举类型作为 keys 的映射表,内部是通过数组方式来实现。EnumMap 将丰富的和安全的 Map 接口与数组快速访问结合到一起,如果你希望要将一个枚举类型映射到一个值,你应该使用 EnumMap。看下面的例子:

private static Map<WeekDayEnum, RainbowColor> schema = 
           new EnumMap<WeekDayEnum, RainbowColor>(WeekDayEnum.class); 
static{ 
   for (int i = 0; i < WeekDayEnum.values().length; i++) { 
       schema.put(WeekDayEnum.values()[i], RainbowColor.values()[i]); 
   } 
} 
System.out.println("What is the lucky color today?"); 
System.out.println("It's " + schema.get(WeekDayEnum.Sat));