按照我现在的理解,枚举就是静态的单例的类的集合。
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 类提供一个静态方法 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));