枚举的示例

枚举类

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));
    }
}

测试结果截图
测试结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值