Enum枚举类

来源:互联网 发布:淘宝充值刷信誉有用吗 编辑:程序博客网 时间:2024/05/17 19:21
public enum TestEnum {    //枚举写在最前面,赋值要都一起赋值,    //这个声明定义的类型是一个类,它刚好有四个实例,    UPDATE(1,"更新"),QUERY(2,"查询"),DELETE(3,"删除"); //通过括号赋值,必须带有一个构造器,和属性跟方法    private int enValue;    private String enDesc;    //构造器默认只能是private的,只能内部使用    private TestEnum(int enValue,String enDesc){        this.enValue=enValue;        this.enDesc=enDesc;    }    //枚举想普通类一样可以添加属性和方法    public static TestEnum getEnu(){        return UPDATE;    }    //在switch语句中使用枚举    public void useSwitch(){        TestEnum en=TestEnum.QUERY;        switch (en){            case UPDATE:  en=TestEnum.UPDATE;break;            case QUERY: en=TestEnum.QUERY;break;            default:en=DELETE;        }    }    //get和set方法    public int getEnValue() {        return enValue;    }    public String getEnDesc() {        return enDesc;    }}

经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum。而java中又是没有多继承的,所以枚举类不能继承。但是可以实现接口

public final class TestEnum extends java.lang.Enum{         //枚举常量都是实例    public static final TestEnum UPDATE;     public static final TestEnum QUERY;     public static final TestEnum DELETE;     public static TestEnum getEnu(){...};     public void useSwitch(){...};     public static TestEnum [] values();     public static TestEnum valueOf(java.lang.String); }

values()和 valueOf()方法都是编译器在编译枚举类的时候添加上去的。

public static void main(String[] args) {        Class clazz=TestEnum.class;        Method[] methods=clazz.getDeclaredMethods();        for(Method method:methods){            System.out.println(method.getName());        }    }//结果main//编译时加上去的valuesvalueOfgetEnuuseSwitchgetEnValuegetEnDesc

利用values()方法遍历枚举中的值:

    //vlaues()方法返回一个数组        for(TestEnum en:TestEnum.values()){            //获取常量            System.out.print(en+"  ");            //获取常量的属性值            System.out.println(en.getEnDesc()+"  "+en.getEnValue());            //获取常量的顺序,从0开始            System.out.println(en.ordinal());        }//结果UPDATE  更新  10QUERY  查询  21DELETE  删除  32

valueOf()方法是通过枚举元素的名称获取一个枚举类

 TestEnum delete=TestEnum.valueOf("DELETE");

java.lang.Enum这个父类中也有一个valueOf方法,用法不同:

Enum.valueOf(TestEnum.class, "DELETE")

重写枚举类中的方法
在枚举元素中可以自定义方法,来重写枚举类中的方法。
每一个枚举元素都是一个继承枚举类的内部子类,并且每一个内部子类中都包含所有的枚举元素。

public enum MethodENUM {    //因为每个常量都是一个实例,它们都继承自枚举类,因此它们    //拥有枚举类的元素,包括其他的常量    GREEN{        //复写枚举中的方法        @Override        public void getInfo() {            super.getInfo();        }    },    Red{        @Override        public void getInfo() {            super.getInfo();        }    };    //该方法会被复写    public void getInfo(){    }    public static void main(String[] args) {        MethodENUM color=GREEN;        //color拥有Red元素,而Red元素也拥有自身Red        color.Red.Red.getInfo();    }}

关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。
EnumSet保证集合中的元素不重复;
EnumMap中的 key是enum类型,而value则可以是任意类型。

 public static void main(String[] args) {        //EnumMap实例        EnumMap<TestEnum,String> testMap=new EnumMap<TestEnum, String>(TestEnum.class);        testMap.put(TestEnum.DELETE,"删除");        testMap.put(TestEnum.QUERY,"查询");        testMap.put(TestEnum.UPDATE,"更新");        for(TestEnum testEnum:TestEnum.values()){            System.out.println(testMap.get(testEnum));        }       //EnumSet实例        EnumSet<TestEnum> testSet=EnumSet.allOf(TestEnum.class);        for(TestEnum testEnum:testSet){            System.out.println(testEnum);        }    }//结果://EnumMap更新查询删除//EnumSetUPDATEQUERYDELETE
原创粉丝点击