一、枚举在Switch中的应用
1public enum MyColor{ 2 //每个枚举值用逗号隔开, 3 RED, 4 BLUE, 5 GREEN;//最后的分号可要或不要 6} 7 8public class Test1{ 9 public static void main(String[] args){ 10 MyColor myColor = MyColor.RED; 11 switch(myColor){ 12 case BLUE://这里就可以直接使用枚举值 13 System.out.println("蓝色"); 14 break; 15 case GREEN: 16 System.out.println("绿色"); 17 break; 18 case RED: 19 System.out.println("红色"); 20 break; 21 default: 22 System.out.println("什么色?"); 23 break; 24 } 25 } 26}
二、枚举的构造函数
1enum MyColor{ 2 RED("Hot", 4), BLUE("SAD",8); 3 4 private String mood; 5 public String getMood{ 6 return mood; 7 } 8 private int index; 9 public int getIndex(){ 10 return index; 11 } 12 private MyColor(String mood, int index){ 13 this.mood = mood; 14 this.index = index; 15 } 16} 17System.out.println(MyColor.RED.getMood());
枚举成员均要实现构造函数
三、枚举的抽象方法
1/** 2 * 订单状态 3 * 4 * 实现带有抽象方法的枚举 5 * 6 * @author wang 7 * 8 */ 9 public enum OrderState { 10 /** 已取消 */ 11 CANCEL {public String getName(){return "已取消";}}, 12 /** 待审核 */ 13 WAITCONFIRM {public String getName(){return "待审核";}}, 14 /** 等待付款 */ 15 WAITPAYMENT {public String getName(){return "等待付款";}}, 16 /** 正在配货 */ 17 ADMEASUREPRODUCT {public String getName(){return "正在配货";}}, 18 /** 等待发货 */ 19 WAITDELIVER {public String getName(){return "等待发货";}}, 20 /** 已发货 */ 21 DELIVERED {public String getName(){return "已发货";}}, 22 /** 已收货 */ 23 RECEIVED {public String getName(){return "已收货";}}; 24 25 public abstract String getName(); 26 }
枚举成员均要实现抽象方法
四、枚举实现接口
1package yuki.core.enumeration.interfaces; 2 3import java.util.Arrays; 4import java.util.List; 5 6public class PlanetTest { 7 8 private interface Move{ 9 void move(); 10 }; 11 12 private enum Planet implements Move{ 13 SOLAR, 14 EARTH{ 15 @Override 16 public void move() { 17 System.out.println("rounding...center:" + SOLAR); 18 } 19 }, 20 MOON{ 21 @Override 22 public void move() { 23 System.out.println("rounding...center:" + EARTH); 24 } 25 }; 26 27 @Override 28 public void move() { 29 System.out.println("rounding..."); 30 } 31 } 32 33 public static void main(String[] args) { 34 35 List<Planet> planets = Arrays.asList(Planet.values()); 36 for(Planet planet : planets){ 37 System.out.print(planet + " : "); 38 planet.move(); 39 } 40 } 41 42} 43 44SOLAR : rounding... 45EARTH : rounding...center:SOLAR 46MOON : rounding...center:EARTH
枚举成员均要实现接口方法,可单独实现,亦可统一实现~
五、枚举常用方法
int **compareTo**(E o)
比较此枚举与指定对象的顺序。
Class<E> **getDeclaringClass**()
返回与此枚举常量的枚举类型相对应的 Class 对象。
String **name**()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int **ordinal**()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String **toString**()
返回枚举常量的名称,它包含在声明中。
static `<T extends Enum<T>> T` **valueOf**(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
六、EnumSet,EnumMap 的应用
1public class Test { 2 public static void main(String[] args) { 3 // EnumSet的使用 4 EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class); 5 for (EnumTest day : weekSet) { 6 System.out.println(day); 7 } 8 9 // EnumMap的使用 10 EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class); 11 weekMap.put(EnumTest.MON, "星期一"); 12 weekMap.put(EnumTest.TUE, "星期二"); 13 // ... ... 14 for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) { 15 Entry<EnumTest, String> entry = iter.next(); 16 System.out.println(entry.getKey().name() + ":" + entry.getValue()); 17 } 18 } 19}
七、覆盖枚举的方法
1public enum Color { 2 RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); 3 // 成员变量 4 private String name; 5 private int index; 6 // 构造方法 7 private Color(String name, int index) { 8 this.name = name; 9 this.index = index; 10 } 11 //覆盖方法 12 @Override 13 public String toString() { 14 return this.index+"_"+this.name; 15 } 16}
八、让相同枚举类型下的枚举值具有不同的行为--重写枚举值的方法
1public enum MyColor{ 2 RED, BLUE(){ 3 @Override 4 public boolean getFlag(){ 5 return false; 6 } 7 }; 8 public boolean getFlag(){ 9 return true; 10 } 11} 12// 调用 13System.out.println(MyColor.RED.getFlag()); // 显示true 14System.out.println(MyColor.BLUE.getFlag()); // 显示false