定义Enum本质上是在定义一个类别,当你使用enum来定义枚举类型时,
实际上您定义出来的类型继承自java.lang.Enum这个抽象类,而每个枚举的成员就是你定义的枚举类型
的一个实例(编译的时候就确定有几个实例了 Instance),它们都是final static public 类型的。还是直接上例子吧,使用方法都有注释。
- /**
- * EnumTest.java
- * enumtest
- *
- * Function: TODO
- *
- * ver date author
- * ──────────────────────────────────
- * 2011-6-26 Leon
- *
- * Copyright (c) 2011, TNT All Rights Reserved.
- */
- package enumtest;
- import java.util.ArrayList;
- import java.util.EnumMap;
- import java.util.EnumSet;
- import java.util.Iterator;
- import java.util.List;
- /**
- * ClassName:EnumTest
- * Function: 演示Enum理解Enum的本质
- * Reason: 定义Enum本质上是在定义一个类别,当你使用enum来定义枚举类型时,
- * 实际上您定义出来的类型继承自java.lang.Enum这个抽象类,而每个枚举的成员就是你定义的枚举类型
- * 的一个实例(编译的时候就确定有几个实例了 Instance),它们都是final static public 类型的。
- *
- * @author Leon
- * @version
- * @since Ver 1.1
- * @Date 2011-6-26
- */
- public class EnumTest {
- public static void main(String... args){
- //枚举的引用
- Color myColor = Color.WHITE;
- //枚举还提供了两个有用的静态方法values()[得到枚举值的数组]和valueOf(),ordinal函数表示顺序(很少用)
- for(Color color : Color.values()){
- System.out.printf("NO.=%d, Color=%s ,%n",color.ordinal() , color );
- //和枚举的位置进行比较自己就是0 在前就是负数 在后就是正数
- System.out.println("compare to "+myColor.compareTo(color));
- }
- //通过字符串转换为对应的枚举值 在代替switch的语句很有用,因为其它人传来的一一般就是字符串
- myColor=Color.valueOf("BULE");
- //Switch中还可以传入Enum类型, 现在switch中可以传入5种类型 int char byte short和enum
- switch(myColor){
- case WHITE:
- System.out.println("white");
- case RED:
- System.out.println("red");
- case BULE:
- System.out.println("transfer success!");
- }
- System.out.println("---------------------------Test of -------------------");
- EnumSet
- <color> enumSet= EnumSet.of(Color.WHITE,Color.WHITE , Color.RED);
- System.out.println("Show all EnumSet:");
- showEnumSet(enumSet);
- //使用complementOf 是除了刚才定义的集合 剩下的集合(减法)
- System.out.println("---------------------------Test Complement of -------------------");
- showEnumSet(EnumSet.complementOf(enumSet));
- //使用EnumSet.noneOf方法 Color.class 指明只能接收Color类型的
- System.out.println("---------------------------Test None of -------------------");
- enumSet=EnumSet.noneOf(Color.class);
- showEnumSet(enumSet);
- //使用copyOf方法 (注意:EnumSet都是包含有of这个关键字)将集合里面的元素copy到Enum集合中从而
- //完成初始化
- System.out.println("---------------------------Test Copyof-------------------");
- List
- <color> list = new ArrayList
- <color>();
- list.add(Color.BULE);
- list.add(Color.RED);
- EnumSet test=EnumSet.copyOf(list);
- showEnumSet(test);
- System.out.println("----------------------------------Test EnumMap ----------------------------------");
- // EnumMap
- EnumMap
- <color,string> enumMap = new EnumMap
- <color,string>(Color.class);
- enumMap.put(Color.BULE, "Bule");
- enumMap.put(Color.RED, "Red");
- enumMap.put(Color.WHITE, "White");
- for(Color color : Color.values()){
- System.out.println(enumMap.get(color));//返回有一个为空 原因是Yellow没有赋值
- }
- }
- //使用EnumSet
- public static void showEnumSet(EnumSet
- <color> enumSet){
- for(Iterator
- <color> iterator =enumSet.iterator();iterator.hasNext(); ){
- System.out.print(iterator.next()+ ",");
- }
- System.out.println();
- }
- }
- enum Color{
- WHITE("zui") ,
- RED("niu"),
- BULE("wang"),
- YELLOW;
- private String value ;
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- //构造方法
- Color(String value){
- }
- Color(){
- }
- }
本文转自 最牛傻蛋 51CTO博客,原文链接:http://blog.51cto.com/zuiniuwang/718360,如需转载请自行联系原作者