• 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 }
  • 相关阅读:
    mybatis之mapper.xml分析
    mybati之运行过程
    ibatis中的resultClass,parameterClass,resultMap,resultType的使用与区别
    mybatis之parameterType传递多个参数
    mybati之#与$的区别
    【Java面试题】20 运行时异常和一般异常有何区别
    【Java面试题】19 final,finally和finalize的区别
    【Java面试题】18 java中数组有没有length()方法?string没有lenght()方法?下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
    【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!
    【Java面试题】16 静态代码块,main方法,构造代码块,构造方法
  • 原文地址:https://www.cnblogs.com/jalja/p/5004388.html
Copyright © 2020-2023  润新知