Java中的枚举

在java1.5之前,java并不支持枚举数据类型,在JDK1.5,引入了一种新的数据类型–枚举类型(Enumerated Type),使用emun关键字进行标识;

常见的枚举定义方法

在枚举类型中,一般的定义方法如下:
enum 枚举名 { 枚举值表}; 如:
enum WeekDay{ Mon,Tue,Wed,Thu,Fri,Sat,Sun;} 枚举还有一些其他定义方法:
enum WeekDay{ Mon,Tue,Wed,Thu,Fri,Sat,Sun;} //先定义enum WeekDay a,b,c //后说明 或者为:
enum WeekDay{ Mon,Tue,Wed,Thu,Fri,Sat,Sun;} a,b,c //定义的同时说明 或者为:
enum { Mon,Tue,Wed,Thu,Fri,Sat,Sun;} a,b,c //直接说明,即定义无名枚举

在程序中使用枚举

public enum myColor { 红色, 绿色,蓝色; }

public static void main(String[] args) {
        myColor c1 = myColor.红色;
        System.out.println(c1);

        myColor c2 = myColor.绿色;
        System.out.println(c2);

        myColor c3 = myColor.蓝色;
        System.out.println(c3);
    }

程序运行结果:

java 枚举型参数 java中的枚举类型_System

在switch语句中使用枚举

public enum myColor { 红色, 绿色,蓝色; }

public static void main(String[] args) {
        myColor c1 = myColor.红色;
        switch (c1) {
            case 红色: {
                System.out.println("我是红色");
                break;
            }
            case 绿色: {
                System.out.println("我是绿色");
                break;
            }
            case 蓝色: {
                System.out.println("我是蓝色");
                break;
            }
        }
    }

java 枚举型参数 java中的枚举类型_System_02

枚举类

枚举类是java.lang包下定义的一个公共类,它的作用是用来构造新的枚举类型。它是JDK1.5之后推出的一个新的类,用来弥补关于枚举这一常用集合在Java中的不足。

在Enum类下定义了十多种方法,每一种方法都是对Enum创建的枚举对象实施操作,下面列举了Enum类的常用方法:

  1. 通过values()方法得到对象取值
public class ValueOfEnum {
    public static void main(String[] args) {
        myColor[] allColor = myColor.values();
        for (myColor aColor : allColor) {
            System.out.println(aColor);
        }
    }
}

java 枚举型参数 java中的枚举类型_enum_03


2. 通过调用Enum类中的ordinal()方法,输出枚举类型的每一个对象的编号

public class ValueOfEnum {
    public static void main(String[] args) {
        myColor[] allColor = myColor.values();
        for (myColor aColor : allColor) {
            System.out.println(aColor.name() + "---->" + aColor.ordinal());
        }
    }
}

java 枚举型参数 java中的枚举类型_枚举类_04


3. 调用Enum类中的valueOf()方法,这是一个静态方法,第一个参数是myColor.class,用来返回枚举类型,第二个参数是字符串常量“红色”,这个参数必须在与该枚举类中声明枚举值时所用的标识符完全匹配,不允许使用额外的空白字符;

public class ValueOfEnum {
    public static void main(String[] args) {
        myColor c=myColor.valueOf(myColor.class,"红色");
        System.out.println(c);
    }
}

java 枚举型参数 java中的枚举类型_java 枚举型参数_05

类集对枚举的支持

使用EnumMap操作枚举类中的实例

public class EnumMapDemo {
    public static void main(String[] args) {
        //EnumMap的使用
        EnumMap<myColor, String> eMap = new EnumMap(myColor.class);
        eMap.put(myColor.红色, "RED");
        eMap.put(myColor.绿色, "GREEN");
        eMap.put(myColor.蓝色, "BLUE");
        for (Map.Entry<myColor, String> me : eMap.entrySet()) {
            System.out.println(me.getKey() + "--->" + me.getValue());
        }
    }
}

java 枚举型参数 java中的枚举类型_枚举类_06

使用EnumSet中的静态方法allOf()操作枚举类中的实例

public class EnumMapDemo {
    public static void main(String[] args) {
        //EnumSet的使用
        EnumSet<myColor> eSet = EnumSet.allOf(myColor.class);
        Iterator<myColor> iter = eSet.iterator();
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }
    }
}

java 枚举型参数 java中的枚举类型_枚举类_07

枚举的接口

创建枚举接口

public interface ColorEnum {
    public String getColor();
}

使用枚举实现该接口

enum NewColor2 implements ColorEnum {
    红色 {
        public String getColor() {
            return "RED";
        }
    },
    绿色 {
        public String getColor() {
            return "GREEN";
        }
    },

    蓝色 {
        public String getColor() {
            return "BLUE";
        }
    };

}

通过代码测试上面实现的接口类型

public class TestColor {
    public static void main(String[] args) {
        for (NewColor2 c : NewColor2.values()) {
            System.out.println(c.ordinal() + "-->" + c.name() + ":" + c.getColor());
        }
    }
}

java 枚举型参数 java中的枚举类型_java_08

在枚举类中定义抽象方法

public enum NewColor3 {
    红色 {
        public String getColor() {
            return "RED";
        }
    },
    蓝色 {
        public String getColor() {
            return "GREEN";
        }
    },
    绿色 {
        public String getColor() {
            return "BLUE";
        }
    };

    public abstract String getColor();
}

测试,运行结果

public class TestColor {
    public static void main(String[] args) {
        for (NewColor3 c:NewColor3.values()){
            System.out.println(c.ordinal()+"-->"+c.name()+":"+c.getColor());
        }
    }
}

java 枚举型参数 java中的枚举类型_enum_09


上面两种方式的运行结果是一样的,所不同的是,抽象方法getColor()可以直接在枚举中定义,这个抽象方法需要在枚举对象“红色,绿色,蓝色”中一一给予单独实现,否则会编译出错。