枚举

2019-04-07  本文已影响0人  Finlay_Li

定义

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 

}
上一篇下一篇

猜你喜欢

热点阅读