9 java枚举总结

来源:互联网 发布:优衣库 实体 淘宝 编辑:程序博客网 时间:2024/06/07 23:32

1 语法
创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum<E extends Enum<E>> ,而E表示枚举类型的名称。

package javazongjie;public enum EnumTest {    MON,TUE,SED,THU,FRI,SAT,SUN;}

上述代码实际上调用了7次 Enum(String name, int ordinal):

new Enum<EnumTest>("MON",0);

2 遍历、switch等常用操作

public static void main(String[] args) {    for(EnumTest et : EnumTest.values()) {        System.out.print(et.toString() + ",");    }    System.out.println();    System.out.println("--------");    EnumTest test = EnumTest.FRI;    switch (test) {    case FRI:        System.out.println("星期五");        break;    default:        System.out.println("!星期五");        break;    }}

3 enum对象的常用方法介绍

package javazongjie;public class Test {    public static void main(String[] args) {        EnumTest fri = EnumTest.FRI;        //比较此枚举与制定对象的顺序        int compareTo = fri.compareTo(EnumTest.MON);        System.out.println("compareTo方法:" + compareTo);        //》compareTo方法:4        //getDeclaringClass()返回与此枚举常量的枚举类型相对应的Class对象        System.out.println("getDeclaringClass():" + fri.getDeclaringClass().getName());        //》getDeclaringClass():javazongjie.EnumTest        System.out.println("name():" + fri.name());        //》name():FRI        System.out.println("toString():" + fri.toString());        //》toString():FRI        System.out.println("ordinal():" + fri.ordinal());        //》ordinal():4    }}

4 给enum自定义属性和方法

package javazongjie;public enum EnumTest {    MON(1),    TUE(2),WOE(3),THU(4),FRI(5),    SAT(6) {        @Override        public boolean isRest() {            return true;        }    },SUN(0) {        @Override        public boolean isRest() {            return true;        }    };    private int value;    private EnumTest(int value) {        this.value = value;    }    public int getValue() {        return value;    }    public boolean isRest(){        return false;    }    public static void main(String[] args) {        EnumTest fri2 = EnumTest.SUN;        System.out.println(fri2.getValue());        System.out.println(fri2.isRest());    }}
package javazongjie;public enum EnumTest2 {    MON(1,"Monday"),    TUE(2),WOE(3),THU(4),FRI(5),    SAT(6) {        @Override        public boolean isRest() {            return true;        }    },SUN(0) {        @Override        public boolean isRest() {            return true;        }    };    private int value;    private String completeName;    private EnumTest2(int value) {        this.value = value;    }    private EnumTest2(int value, String completeName) {        this.value = value;        this.completeName = completeName;    }    public int getValue() {        return value;    }    public boolean isRest(){        return false;    }    public String getCompleteName() {        return completeName;    }    public void setCompleteName(String completeName) {        this.completeName = completeName;    }    public static void main(String[] args) {        EnumTest2 mon2 = EnumTest2.MON;        System.out.println(mon2.getValue() + " : " + mon2.getCompleteName());        EnumTest2 sun2 = EnumTest2.SUN;        if(sun2.getCompleteName() == null) {            sun2.setCompleteName("Sunday");        }        System.out.println(sun2.getCompleteName());    }}

5 EnumSet、EnumMap应用

package javazongjie;import java.util.EnumMap;import java.util.EnumSet;import java.util.Map.Entry;public class Test2 {    public static void main(String[] args) {        EnumSet<EnumTest2> enumSet = EnumSet.allOf(EnumTest2.class);        for(EnumTest2 et : enumSet) {            System.out.print(et + " ");        }        //>>MON TUE WOE THU FRI SAT SUN         System.out.println();        EnumMap<EnumTest2,String> enumMap = new EnumMap<>(EnumTest2.class);        enumMap.put(EnumTest2.MON, "星期一");        for(Entry<EnumTest2, String> e : enumMap.entrySet()) {            System.out.println(e.getKey() + " " + e.getKey().getCompleteName()+" "+e.getValue());        }        //>> MON Monday 星期一    }}

6 原理分析
enum经过编译器编译之后产生的是一个class文件,该class文件经过反编译生成一个类,该类继承了java.lang.Enum。
所以,实际上enum就是一个class。

7 总结
enum看成一个普通的class,可以定义一些属性和方法。

0 0
原创粉丝点击