枚举

作者: Finlay_Li | 来源:发表于2019-04-07 16:33 被阅读0次

    定义

    JDK1.5 及之后版本新增 enum 关键字用于定义枚举类

    自定义枚举类步骤

    1. 私有化构造器
    2. 类的内部定义public static final 枚举类对象

    普通类:

    public class Season1 {
    
        private final String seasonName;
    
        private final String seasonDesc;
    
        //1 私化构造器
    
        private Season1(String seasonName, String seasonDesc){
    
            this.seasonName = seasonName;
    
            this.seasonDesc = seasonDesc;
    
        }
    
        //2 类的内部创建对象
    
        public static final Season1 SPRING = new Season1("春天", "春眠不觉晓");
    
        public static final Season1 SUMMER = new Season1("夏天", "处处蚊子咬");
    
        public static final Season1 AUTUMN = new Season1("秋天", "秋天叶子黄");
    
        public static final Season1 WINTER = new Season1("冬天", "冬天雪花飘");
    
    }
    

    enum类:

    public enum Season {
    
        SPRING,
    
        SUMMER,
    
        AUTUMN,
    
        WINTER;
    
    }
    

    枚举的规则

    1. 枚举类的属性应该使用private final修饰
    2. 枚举类的构造器只能使用private 访问控制修饰符
    3. 枚举类的所有实例必须在枚举类内部显示创建,系统会自动添加public static final
    4. 在枚举类中,对象由public static final 修饰,所以要使用对象,应该用类名.对象

    枚举类的主要方法

    1. Enum[] values()方法
    for (AuthStatusEnum enumData : AuthStatusEnum.values()) {
    
                if (enumData.getValue().equals(value)) {
    
                    return enumData;
    
                }
    
    }
    
    1. valueOf(String str)
      把一个字符串转为枚举类的对象。
      要求字符串必须与枚举类对象名字相同,才可传为枚举类对象。
    ValidateCodeType.valueOf(type).getParamNameOnValidate()
    

    枚举类在switch的使用

    可以在 switch 表达式中使用枚举类的对象作为表达式,
    case 子句可以使用枚举的对象引用作为判断条件!

    综合运用:提供多个value

    package com.rttx.user.api.enums;
    
    import com.rttx.mobile.util.validation.CheckedException;
    
    /**
     * 类名称:AuthStatusEnum 类描述:   1:未进行任何认证 2:身份证已认证 3:人脸已认证
     * @version 1.0
     */
    
    @Data
    
    public enum AuthStatusEnum {
    
        NOT_AUTH("authed", "1", "未进行任何认证"),
    
        AUTH_ID("authing", "2", "身份证已认证"),
    
        AUTH_FACE("authFalure", "3", "人脸已认证");
    
        private String name;
    
        private String value;
    
        private String label;
    
        AuthStatusEnum(String name, String value, String label) {
    
            this.name = name;
    
            this.value = value;
    
            this.label = label;
    
        }
    
        public static String getLabel(String value) {
    
            try {
    
                return getEnum(value).getLabel();
    
            } catch (CheckedException e) {
    
                // 不存在
    
            }
    
            return "";
    
        }
    
        /**
         * 根据枚举值获取 AuthStatusEnum
         */
    
        public static AuthStatusEnum getEnum(String value) throws CheckedException {
    
            for (AuthStatusEnum enumData : AuthStatusEnum.values()) {
    
                if (enumData.getValue().equals(value)) {
    
                    return enumData;
    
                }
    
            }
    
            throw new CheckedException(String.format("传入的枚举值不存在,AuthStatusEnum:%s", value));
    
        }
    
    }
    
    • 使用方式

    NOT_AUTH.getLabel(String value)
    AuthStatusEnum getEnum(String value)

    综合运用:提供单个value——>定义抽象方法

    • 背景:
      偶然在代码中看到枚举中定义了抽象方法,觉得很奇怪。以前从来没有想过还可以这么用,真是涨姿势。
    public enum Animal {
    
        CAT {
    
            public String makeNoise() { return "MEOW!"; }
    
        },
    
        DOG {
    
            public String makeNoise() { return "WOOF!"; }
    
        };
    
        public abstract String makeNoise();
    
    }
    
    
    package com.dodou.scaffold.mq.enums;
    
    /**
    
    * @author: Lwh
    
    * @ClassName: AmqpQueue
    
    * @Description:
    
    * @version: 1.0.0
    
    * @date: 2019-03-21 10:28 AM
    
    */
    
    public enum AmqpQueue {
    
        RELEASE {
    
            @Override
    
            public String getQueueName() {
    
                return "release.que";
    
            }
    
        };
    
        private String value;
    
        AmqpQueue() {
    
        }
    
        AmqpQueue(String value) {
    
            this.value = value;
    
        }
    
        public void setValue(String value) {
    
            this.value = value;
    
        }
    
        public String getValue() {
    
            return value;
    
        }
    
        public abstract String getQueueName();
    
    }
    

    枚举类实现接口

    public interface Operator {
    
        int apply (int a, int b);
    
    }
    
    public enum SimpleOperators implements Operator {
    
        PLUS {
    
            int apply(int a, int b) { return a + b; }
    
        },
    
        MINUS {
    
            int apply(int a, int b) { return a - b; }
    
        };
    
    }
    
    public enum ComplexOperators implements Operator {
    
        // can't think of an example right now 
    
    }
    

    相关文章

      网友评论

          本文标题:枚举

          本文链接:https://www.haomeiwen.com/subject/oupsiqtx.html