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,如需转载请自行联系原作者

相关文章
|
27天前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
35 3
|
13天前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
15 0
|
1月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
2月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
2月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
2月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
2月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
2月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
1月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
11 0
|
2月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化