枚举

作者: 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 

}

相关文章

  • C#枚举及与枚举常数的转换

    1、枚举的定义 2、枚举绑定到comboBox 3、枚举常数转换为枚举string转枚举 数字值转枚举

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

  • 10、枚举与闭包

    枚举 枚举和普通类相比有什么优势 枚举类型、枚举名称与枚举值 枚举的比较运算 两个枚举之间可以使用等值比较(==)...

  • Swift与OC的语法简单对比(常用语法二)

    20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...

  • Swift 2 学习笔记 10.枚举

    课程来自慕课网liuyubobobo老师 枚举 枚举基础 枚举之原始值 枚举之关联值 枚举递归

  • swift3语法(八)

    枚举/结构体 枚举 定义形式enum 枚举名 { 枚举值} // 例如enum CompassPoint {...

  • C语言基础 之 枚举类型

    枚举类型 枚举类型: 列出所有可能的值 枚举类型的定义 枚举类型定义的一般格式:enum 枚举类型名 {枚举值表}...

  • 枚举

    枚举 Why:为什么需要枚举 What:枚举是什么; How:枚举怎么实现 When:枚举什么时候使用 Where...

  • 枚举的概念及应用

    一、枚举的概念 二、枚举类型的定义 三、枚举变量的定义 四、枚举使用的注意 五、枚举变量的基本操作 五、枚举变量的...

网友评论

      本文标题:枚举

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