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

简介:

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

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

 

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

 

 

 

 

 
  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. }  

 


本文转自 最牛傻蛋 51CTO博客,原文链接:http://blog.51cto.com/zuiniuwang/718360,如需转载请自行联系原作者

相关文章
|
2月前
|
安全 JavaScript 前端开发
JDK1.8的重要的新特性与功能
Java Development Kit (JDK) 1.8,也称为Java 8,是Java平台的一个重大更新,于2014年3月发布。它引入了多项新特性、新的API和性能提升
84 3
|
3月前
|
监控 安全 Java
探索Java的未来:JDK 18新特性全览
探索Java的未来:JDK 18新特性全览
80 0
|
3月前
|
缓存 安全 Java
JDK 14全景透视:每个Java开发者必知的新特性
JDK 14全景透视:每个Java开发者必知的新特性
55 0
|
3月前
|
JavaScript 前端开发 安全
Java新纪元:一探JDK 15的全新特性
Java新纪元:一探JDK 15的全新特性
48 0
|
3月前
|
JSON Java API
探秘JDK 13的黑科技:新特性一览
探秘JDK 13的黑科技:新特性一览
51 0
|
3月前
|
Java 测试技术 API
深度剖析JDK 11全新特性:编程艺术的巅峰之作
深度剖析JDK 11全新特性:编程艺术的巅峰之作
49 0
|
3月前
|
存储 Java 数据管理
探秘JDK 10:崭新特性悉数解析
探秘JDK 10:崭新特性悉数解析
37 0
|
3月前
|
JSON 编解码 Java
Java升级:JDK 9新特性全面解析“
Java升级:JDK 9新特性全面解析“
54 0
|
8天前
|
算法 Java 编译器
升级指南之JDK 11+ 新特性和AJDK
本文详细介绍了JDK个版本之间的特性、区别以及JDK版本更迭时优化了哪些地方,对JDK的版本选择给出了建议,以及升级教程。
|
15天前
|
存储 安全 Java
JDK22发布了!来看看有哪些新特性
以上是介绍 JDK22新特性的全部内容了,突然V哥想要感慨一下,技术之路,学无止境,选择 IT 技术,作个纯粹的人,享受研究技术的过程,这种带来的快感,也许只有真正热爱编程的人才能有体会。