JDK5.0新特性(3)-枚举(Type safe enums)

定义Enum本质上是在定义一个类别,当你使用enum来定义枚举类型时,

实际上您定义出来的类型继承自java.lang.Enum这个抽象类,而每个枚举的成员就是你定义的枚举类型

的一个实例(编译的时候就确定有几个实例了 Instance),它们都是final static public 类型的。还是直接上例子吧,使用方法都有注释。

 

 

?[Copy to clipboard] Download EnumTest.java
 
 

 

  
  
  
  
  1. /**  
  2.  * EnumTest.java  
  3.  * enumtest  
  4.  *  
  5.  * Function: TODO  
  6.  *  
  7.  *   ver     date           author  
  8.  * ──────────────────────────────────  
  9.  *           2011-6-26      Leon  
  10.  *  
  11.  * Copyright (c) 2011, TNT All Rights Reserved.  
  12. */  
  13.    
  14. package enumtest;  
  15.    
  16. import java.util.ArrayList;  
  17. import java.util.EnumMap;  
  18. import java.util.EnumSet;  
  19. import java.util.Iterator;  
  20. import java.util.List;  
  21.    
  22. /**  
  23.  * ClassName:EnumTest  
  24.  * Function: 演示Enum理解Enum的本质  
  25.  * Reason:   定义Enum本质上是在定义一个类别,当你使用enum来定义枚举类型时,  
  26.  * 实际上您定义出来的类型继承自java.lang.Enum这个抽象类,而每个枚举的成员就是你定义的枚举类型  
  27.  * 的一个实例(编译的时候就确定有几个实例了 Instance),它们都是final static public 类型的。  
  28.  *  
  29.  * @author   Leon  
  30.  * @version  
  31.  * @since    Ver 1.1  
  32.  * @Date     2011-6-26  
  33.  */  
  34. public class EnumTest {  
  35.     public static void main(String... args){  
  36.         //枚举的引用  
  37.         Color myColor = Color.WHITE;  
  38.         //枚举还提供了两个有用的静态方法values()[得到枚举值的数组]和valueOf(),ordinal函数表示顺序(很少用)  
  39.         for(Color color : Color.values()){  
  40.             System.out.printf("NO.=%d, Color=%s ,%n",color.ordinal() , color );  
  41.             //和枚举的位置进行比较自己就是0 在前就是负数 在后就是正数  
  42.             System.out.println("compare to "+myColor.compareTo(color));  
  43.         }  
  44.    
  45.         //通过字符串转换为对应的枚举值   在代替switch的语句很有用,因为其它人传来的一一般就是字符串  
  46.         myColor=Color.valueOf("BULE");  
  47.         //Switch中还可以传入Enum类型, 现在switch中可以传入5种类型  int char  byte short和enum    
  48.    
  49.         switch(myColor){  
  50.         case WHITE:  
  51.             System.out.println("white");  
  52.         case RED:  
  53.             System.out.println("red");  
  54.         case BULE:  
  55.             System.out.println("transfer success!");  
  56.         }  
  57.         System.out.println("---------------------------Test of -------------------");  
  58.         EnumSet  
  59. <color> enumSetEnumSet.of(Color.WHITE,Color.WHITE , Color.RED);  
  60.         System.out.println("Show all EnumSet:");  
  61.         showEnumSet(enumSet);  
  62.         //使用complementOf 是除了刚才定义的集合 剩下的集合(减法)  
  63.         System.out.println("---------------------------Test Complement of -------------------");  
  64.         showEnumSet(EnumSet.complementOf(enumSet));  
  65.         //使用EnumSet.noneOf方法   Color.class 指明只能接收Color类型的  
  66.         System.out.println("---------------------------Test None of -------------------");  
  67.         enumSet=EnumSet.noneOf(Color.class);  
  68.         showEnumSet(enumSet);  
  69.         //使用copyOf方法 (注意:EnumSet都是包含有of这个关键字)将集合里面的元素copy到Enum集合中从而  
  70.         //完成初始化  
  71.         System.out.println("---------------------------Test Copyof-------------------");  
  72.         List  
  73. <color> list  =  new ArrayList  
  74. <color>();  
  75.         list.add(Color.BULE);  
  76.         list.add(Color.RED);  
  77.         EnumSet  test=EnumSet.copyOf(list);  
  78.         showEnumSet(test);  
  79.         System.out.println("----------------------------------Test EnumMap ----------------------------------");  
  80. //      EnumMap  
  81.         EnumMap  
  82. <color,string> enumMap  = new EnumMap  
  83. <color,string>(Color.class);  
  84.         enumMap.put(Color.BULE, "Bule");  
  85.         enumMap.put(Color.RED, "Red");  
  86.         enumMap.put(Color.WHITE, "White");  
  87.    
  88.         for(Color color : Color.values()){  
  89.             System.out.println(enumMap.get(color));//返回有一个为空 原因是Yellow没有赋值  
  90.         }  
  91.    
  92.     }  
  93.     //使用EnumSet  
  94.     public static void  showEnumSet(EnumSet  
  95. <color> enumSet){  
  96.    
  97.         for(Iterator  
  98. <color> iterator =enumSet.iterator();iterator.hasNext(); ){  
  99.             System.out.print(iterator.next()+ ",");  
  100.         }  
  101.         System.out.println();  
  102.     }  
  103. }  
  104. enum Color{  
  105.     WHITE("zui") ,  
  106.     RED("niu"),  
  107.     BULE("wang"),  
  108.     YELLOW;  
  109.    
  110.     private String  value ;  
  111.    
  112.     public String getValue() {  
  113.         return value;  
  114.     }  
  115.    
  116.     public void setValue(String value) {  
  117.         this.value = value;  
  118.     }  
  119.     //构造方法  
  120.     Color(String value){  
  121.    
  122.     }  
  123.     Color(){  
  124.    
  125.     }  
  126.    
  127. }  

 

本文出自 “最牛傻蛋的博客” 博客,转载请与作者联系!

你可能感兴趣的:(枚举,职场,新特性,休闲,jdk5.0)