1.使用EnumSet替代标志:Set是一种集合,只能向其中添加不重复的对象。由于不能从enum中删除或添加元素,java SE5引入EnumSet,EnumSet中的元素必须来自一个enum,具有高品质、类型安全的优势。
enum Season { SPRING, SUMMER, AUTUMN, WINTER; } public class Test16 { public static void main(String[] args) { EnumSet<Season> seasons = EnumSet.noneOf(Season.class); seasons.add(Season.AUTUMN); System.out.println(seasons); seasons = EnumSet.allOf(Season.class); System.out.println(seasons); } }
2.使用EnumMap:EnumMap要求其中的键(key)必须来自一个enum,它在内部以一个数组存储value,根据enum类型的key直接定位到内部数组的索引。enum的每个实例作为一个键,总是存在的。没有为这个键调用put()方法来存入相应的值的话,其对应的值就是null。
enum Season { SPRING, SUMMER, AUTUMN, WINTER; } public class Test17 { public static void main(String[] args) { EnumMap<Season, String> map = new EnumMap<Season, String>(Season.class); map.put(Season.SPRING, "春天"); map.put(Season.SUMMER, "夏天"); map.put(Season.AUTUMN, "秋天"); map.put(Season.WINTER, "冬天"); System.out.println(map); System.out.println(map.get(Season.AUTUMN)); } }
3.常量相关的方法:可以为enum实例编写方法,为每个实例给出不同的行为。实现常量的相关方法需要为enum定义一个或多个abstract方法,然后在为每个enum实例实现该抽象方法。
public enum Season3 { SPRING, SUMMER, AUTUMN, WINTER { void a() { System.out.println("a()"); } }; void a() { System.out.println("a1()"); } public static void main(String[] args) { for (Season3 season : values()) { System.out.print(season + ":"); season.a(); } } }