枚举的示例

来源:互联网 发布:淘宝退款卖家拒绝几次 编辑:程序博客网 时间:2024/05/21 19:29

枚举类

package com.yisces.y_enum;import java.util.EnumMap;import java.util.EnumSet;/** * 定义枚举 * @author yisces * */public enum EnumConstant {    //此时每一个枚举就想当与一个类,他们拥有共同的父类,因此要实现父类的getValue方法    ME(1){        @Override        public String getValue() {            return "我";        }    }    ,YOU(2){        @Override        public String getValue() {            return "你";        }    }    ,HE(3){        @Override        public String getValue() {            return "他";        }    };    private Number num;    /**     * 待构造参数的枚举 --构造函数只能为私有,可以不写,默认为私有     * @param num     */    private EnumConstant(int num){        this.num = num;    }    public abstract String getValue(); //枚举抽象方法,具体实现由枚举内部类实现    /**     * 重写toString方法,这是调用枚举时返回的是对应的num     */    public String toString(){        return num.toString();    }    /**     * 枚举类里可以写静态方法 --用switch判断     *     * @author yisces     * @param constant     * @return     */    public static EnumConstant getValueBySwitch(EnumConstant constant){        EnumConstant enumConstant;        switch(constant){            case ME:                System.out.println("你选择了我");                enumConstant = EnumConstant.ME;                break;            case YOU:                System.out.println("你选择了自己");                enumConstant = EnumConstant.YOU;                break;            case HE:                System.out.println("你选择了他");                enumConstant = EnumConstant.HE;                break;            default:                System.out.println("你选择错误");                enumConstant = null;                break;        }        return enumConstant;    }    /**     * 枚举类里可以写静态方法 --用if判断     *     * @author yisces     * @param constant     * @return     */    public static EnumConstant getValueByIf(EnumConstant constant){        EnumConstant enumConstant;        if(ME == constant){            System.out.println("你选择了我");            enumConstant = EnumConstant.ME;        }else if(YOU == constant){            System.out.println("你选择了你自己");            enumConstant = EnumConstant.YOU;        }else if(HE == constant){            System.out.println("你选择了他");            enumConstant = EnumConstant.HE;        }else {            enumConstant = null;        }        return enumConstant;    }    /**     * 演示枚举类型的遍历     *     * @author yisces     */    public static void getEnumLoop(){        EnumConstant[] constantArr = EnumConstant.values();        for(EnumConstant constant : constantArr){            System.out.println("当前枚举的名字:" + constant.name());            System.out.println("当期枚举所在类中的位置:" + constant.ordinal());            System.out.println("当前枚举:" + constant);        }    }    /**     * 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key为枚举类型     *     * @author yisces     */    public static void getEnumMap(){        //定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认为key的类的类型        EnumMap<EnumConstant, String> currEnumMap = new EnumMap<EnumConstant, String>(EnumConstant.class);        currEnumMap.put(EnumConstant.ME, "我");        currEnumMap.put(EnumConstant.YOU, "你");        currEnumMap.put(EnumConstant.HE, "他");        /*         * 遍历Map对象         */        for(EnumConstant constant : EnumConstant.values()){            System.out.println("[key = "+constant.name()+", value = "+currEnumMap.get(constant)+"]");        }    }    /**     * 演示EnumSet使用方法,EnumSet是一个抽象类,获取一个类型的枚举类型内容     * 可以使用allOf方法,allOf创建一个包含所有在指定元素类型的元素的枚举set     * public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)     * @author yisces     */    public static void getEnumSet(){        EnumSet<EnumConstant> currEnumSet = EnumSet.allOf(EnumConstant.class);        for(EnumConstant constant : currEnumSet){            System.out.println("当前EnumSet中数据为:" + constant + ",在枚举类中的位置为:" + constant.ordinal());        }    }    private static EnumMap<EnumConstant, String> currEnumMap = new EnumMap<EnumConstant, String>(EnumConstant.class);    static {        currEnumMap.put(EnumConstant.ME, "我");        currEnumMap.put(EnumConstant.YOU, "你");        currEnumMap.put(EnumConstant.HE, "他");    }    /**     * 综合应用--获取枚举对应的名称     * 上面那种给每个变量别名的方法,自我感觉不好,太分散了,我们可以通过EnumMap的方式加判断的方式来返回对应的别名     *     * @author yisces     * @return     */    public static String getValueByMultiple(EnumConstant enumConstant){        String byname = "";        for(EnumConstant constant : EnumConstant.values()){            if(constant == enumConstant){                System.out.println("[key = "+constant.name()+", value = "+currEnumMap.get(constant)+"]");                byname = currEnumMap.get(constant);                break;            }        }        return byname;    }}

测试类

package com.yisces.y_enum;public class EnumTest {    public static void main(String[] args) {        System.out.println(EnumConstant.ME); //重写 toSting方法后 输出结果为1        System.out.println("<------------分割线-------------->");        System.out.println(EnumConstant.ME.getValue()); //调用getValue返回我们定义的当前元素的别名        System.out.println("<------------分割线-------------->");        /*         * 两个判断         */                  System.out.println(EnumConstant.getValueByIf(EnumConstant.ME));        System.out.println("<------------分割线-------------->");        System.out.println(EnumConstant.getValueBySwitch(EnumConstant.YOU));        System.out.println("<------------分割线-------------->");        /*         * 三个遍历         */        System.out.println("普通遍历:");        EnumConstant.getEnumLoop(); //普通遍历        System.out.println("<------------分割线-------------->");        System.out.println("EnumMap遍历:");        EnumConstant.getEnumMap(); //EnumMap遍历        System.out.println("<------------分割线-------------->");        System.out.println("EnumSet遍历:");        EnumConstant.getEnumSet(); //EnumSet遍历        /*         * 综合应用         */        System.out.println("<------------分割线-------------->");        System.out.println(EnumConstant.getValueByMultiple(EnumConstant.ME));    }}

测试结果截图
测试结果

0 0
原创粉丝点击