转载

java 枚举

一、为什么使用枚举

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

面对这样的常量我们往往使用   public       final       static       去定义,而使用Enum枚举类型,可以将以前笨拙的代码变得优雅简单!

二、枚举的特点

1.枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

2.他是个普通的类,它已经继承了Enum (java 是单继承)所以他不能继承其他类了。

1 public enum EnumTest {  2     //使用枚举定义常量  3     RED(1), GREEN(2) , YELLOW(3) ;  4     private int code;  5     // 构造函数,枚举类型只能为私有  6     private EnumTest(int code){  7         this.code=code;  8     }  9     public String toString(){ 10         return String.valueOf(this.code); 11     } 12      /** 13      *   演示枚举类型的遍历 14      */ 15     private static void testTraversalEnum() { 16         EnumTest[] enumTest = EnumTest.values (); 17        for (EnumTest eEnumTest : enumTest) { 18           System. out .println( " 当前灯 name : " + eEnumTest.name()); 19           System. out .println( " 当前灯: " + eEnumTest); 20           System. out .println( " 当前灯 ordinal : " + eEnumTest.ordinal()); 21       } 22    } 23     /** 24      *   演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不过 key 要是枚举类型 25      */ 26     private static void testEnumMap() { 27        // 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型 28       EnumMap<EnumTest, String> currEnumMap = new EnumMap<EnumTest, String>(EnumTest.class ); 29       currEnumMap.put(EnumTest.RED , "红灯"); 30       currEnumMap.put(EnumTest.GREEN , "绿灯"); 31       currEnumMap.put(EnumTest.YELLOW , "黄灯"); 32        // 2. 遍历对象 33        for (EnumTest aEnumTest : EnumTest.values ()) { 34           System. out .println( "[key=" + aEnumTest.name() + ",value="+ currEnumMap.get(aEnumTest) + "]" ); 35       } 36    } 37     /** 38      *   演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容 <BR/> 39      *   可以使用 allOf 方法 40      */ 41     private static void testEnumSet() { 42       EnumSet<EnumTest> currEnumSet = EnumSet.allOf (EnumTest.class ); 43        for (EnumTest aEnumTestSetElement : currEnumSet) { 44           System. out .println( " 当前 EnumSet 中数据为: " + aEnumTestSetElement); 45       } 46    } 47     /** 48      * switch与enum的结合使用   49      */ 50     private static void testsWitch() { 51         EnumTest switchState = EnumTest.RED;   52         switch (switchState) {   53         case RED:   54             System.out.println("RED");   55             break;   56         case GREEN:   57             System.out.println("GREEN");   58             break;   59         default: 60             System.out.println("YELLOW");   61             break;   62         } 63      } 64     public static void main(String[] args) { 65         testTraversalEnum(); 66         testEnumMap(); 67         testEnumSet(); 68         testsWitch(); 69     } 70 }
正文到此结束
Loading...