一文搞懂Java项目中枚举的定义与使用

 更新时间:2022年06月16日 10:37:18   作者:java奥斯卡  
枚举就是用enum修饰是一种Java特殊的类,枚举是class、底层是继承了java.lang.Enum类的实体类。本文将详解枚举的定义与使用,需要的可以参考一下

什么是枚举

最近写新项目!有很多数据字典常量需要定义和使用、就顺便记录一下、什么是枚举类呢?就是用enum修饰是一种Java特殊的类,枚举是class、底层是继承了java.lang.Enum类的实体类、使用枚举可以很方便的定义数据常量、方便清晰我们使用

为什么需要枚举类

下面就举例说明一下吧

1)出于类型安全考虑,没用枚举类之前,常用静态常量来表示。 比如对于性别的表示:

public static final int WOMAN = 0;
public static final int MAN = 1;

这种性别定义实际上是一个整数数据类型。首先,这些变量可用于加减运算。当然我们很少这样干 第二,含义不明确。我们调试的时候,最初将“男”输出到,结果为1。因此,我们必须在前面寻找0的含义,尤其是当我们查看其他人的代码时。会看不懂、定义枚举类在类里面进行详细说明这样的话就能清楚的知道含义。

2) 代码更优雅

在项目大一点当中,可以使用数百个静态常量。如果它们都写在一个文件类里面的话,很容易造成命名混乱,程序也很难读取。

3) 枚举类可以帮助我们定义所需的类型

枚举易于记忆和使用,相当于一个接口。使用时,只需封装内部数据类型并限制数据字段。此外,可以为不同的枚举变量调用不同的处理方法(这可以通过实现枚举类的抽象方法来实现)。

枚举类的定义和使用

下面就定义一个试题类型的枚举类吧

    /**
 * 试题类型 枚举类; 0 填空题、1 判断 题、2 单选题、3 多选题、4 简答题、5 问答题、6 论述题、7 计算题、8 画图题、9 其他题
 * @author lyy
 * @date 2022/05/23
 */
public enum TopicTypeEnum {
    /** 填空题  */
    FILL_IN_THE_BLANK(0, "填空题"),
    /** 判断题  */
    JUDGE(1, "判断题"),
    /** 单选题  */
    SINGLE_CHOICE(2, "单选题"),
    /** 多选题  */
    MULTIPLE_CHOICE(3, "多选题"),
    /** 简答题  */
    BRIEF_ANSWER(4, "简答题"),
    /** 问答题  */
    QUESTIONS_AND_ANSWERS(5, "问答题"),
    /** 论述题  */
    DISCUSS(6, "论述题"),
    /** 计算题  */
    COMPUTE(7, "计算题"),
    /** 画图题  */ 
    //最后一个类型必须要用分号结束
    DRAW_PICTURE(9, "画图题");

    /** 值 */
    private final Integer code;

    /** 名称 */
    private final String name;

    public static TopicTypeEnum getByCode(Integer code) {
        if (null == code) {
            return null;
        }
        for (TopicTypeEnum status : TopicTypeEnum.values()) {
            if (status.getCode().intValue() == code.intValue()) {
                return status;
            }
        }
        return null;
    }

    public static TopicTypeEnum getByName(String name) {
        for (TopicTypeEnum status : TopicTypeEnum.values()) {
            if (status.getName().equals(name)) {
                return status;
            }
        }
        return null;
    }

    public static List<NameCode> getNameCode() {
        return Stream.of(TopicTypeEnum.values())
            .map(item -> new NameCode(item.getCode(), item.getName()))
            .collect(Collectors.toList());
    }

    TopicTypeEnum (Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    /**
     *  @author lyy
     *  @date 2022/06/14
     *  @return 枚举对象数组
     */
    public static List<Map<String, Object>> toList() {
        List<Map<String, Object>> list = new ArrayList<>();
        for (TopicTypeEnum item : TopicTypeEnum.values()) {
            Map<String, Object> map = new HashMap<>();
            map.put("code", item.getCode());
            map.put("name", item.getName());
            list.add(map);
        }
        return list;
    }

枚举类的常用方法

  • valueOf():返回当前枚举类的name属性,如果没有,则throw new java.lang.IllegalArgumentException()。具体可以查看java.lang.Enum源码。
  • values():返回包括所有枚举变量的数组。
  • toString(),name():返回当前枚举类变量的name属性
  • ordinal():枚举类会给所有的枚举变量一个默认的次序,该次序从0开始,是根据我们定义的次序来排序的。而ordinal()方法就是获取这个次序(或者说下标)。
  • compareTo():返回两个次序相减后的结果。

到此这篇关于一文搞懂Java项目中枚举的定义与使用的文章就介绍到这了,更多相关Java枚举内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 基础之内部类详解及实例

    Java 基础之内部类详解及实例

    这篇文章主要介绍了 Java 基础之内部类详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Java简单计算圆周率完整示例

    Java简单计算圆周率完整示例

    这篇文章主要介绍了Java简单计算圆周率,结合完整实例形式分析了Java计算圆周率的原理与操作技巧,代码备有较为详尽的注释便于理解,需要的朋友可以参考下
    2018-05-05
  • java 启动参数 springboot idea详解

    java 启动参数 springboot idea详解

    这篇文章主要介绍了java 启动参数 springboot idea的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • IntelliJ IDEA教程之clean或者install Maven项目的操作方法

    IntelliJ IDEA教程之clean或者install Maven项目的操作方法

    这篇文章主要介绍了IntelliJ IDEA教程之clean或者install Maven项目的操作方法,本文分步骤给大家介绍两种方式讲解如何调试出窗口,需要的朋友可以参考下
    2023-04-04
  • springboot整合日志处理Logback的实现示例

    springboot整合日志处理Logback的实现示例

    Logback是由log4j创始人设计的又一个开源日志组件,本文主要介绍了springboot整合日志处理Logback,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • Mybatis 多对一查询的实现方法

    Mybatis 多对一查询的实现方法

    这篇文章主要介绍了Mybatis 多对一查询,本文通过场景分析示例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java设计模式之观察者模式observer pattern详解

    Java设计模式之观察者模式observer pattern详解

    这篇文章主要介绍了Java设计模式之观察者模式observer pattern详解,当一个对象发生数据变化时,通知其他相关的一系列对象,接受到通知的对象根据该对象的变化进行相应处理以响应变化的过程,需要的朋友可以参考下
    2023-12-12
  • Java 控制流程、大数值、数组

    Java 控制流程、大数值、数组

    这篇文章主要给大家介绍的是Java 控制流程、大数值、数组的一些相关自来哦,感兴趣的小伙伴可以参考下面文章的具体内容,希望文章对你有所帮助
    2021-10-10
  • Java中的ReentrantLock原理解析

    Java中的ReentrantLock原理解析

    这篇文章主要介绍了Java中的ReentrantLock原理解析,ReentrantLock是Java中的一个线程同步工具,它提供了比synchronized更灵活和强大的功能。它是一个可重入的互斥锁,意味着同一个线程可以多次获取该锁,而不会发生死锁,需要的朋友可以参考下
    2023-11-11
  • SkyWalking自定义链路追踪实现步骤

    SkyWalking自定义链路追踪实现步骤

    本文详细介绍了如何使用SkyWalking进行自定义链路追踪的步骤,包括POM文件依赖和逻辑业务代码的编写,文章最后推荐了脚本之家作为进一步学习的资源
    2024-02-02

最新评论