前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 中枚举类的使用

Java 中枚举类的使用

作者头像
老九君
发布2022-09-02 12:41:21
1.6K0
发布2022-09-02 12:41:21
举报
文章被收录于专栏:老九学堂

在日常写项目时,很多数据字典常量都需要定义和使用,同时在 Java 面试中,枚举也是一个绕不开的话题,这篇文章就来详细介绍一下枚举的定义以及使用。

01 

【什么是枚举类?】

枚举类型在 C# 或 C++ 、 java 、 VB 等一些编程语言中是一种基本数据类型而不是构造数据类型。

而在C语言中则是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

枚举类的定义就是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内,使用枚举可以很方便地定义数据常量、以及我们的使用。

02 

【为什么需要枚举类?】

举个简单的例子来说明一下~

(1)出于类型安全考虑,没用枚举类之前,常用静态常量来表示。

比如对于性别的表示:

代码语言:javascript
复制
public static final int WOMAN = 0;public static final int MAN = 1;

这种性别定义实际上是一个整数数据类型。首先,这些变量可用于加减运算,但我们通常不这么干。

第二,含义不明确。我们调试的时候,最初将“男”输出,结果为1。因此,我们必须在前面寻找0的含义。

尤其是当我们查看其他人的代码时会看不懂。而定义枚举类在类里面进行详细说明的话就能清楚得知含义。

(2)代码更优雅。

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

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

枚举易于记忆和使用,相当于一个接口。使用时,只需封装内部数据类型并限制数据字段。

此外,还可以为不同的枚举变量调用不同的处理方法(这可以通过实现枚举类的抽象方法来实现)。

03 

【枚举类的定义和使用】

下面就定义一个试题类型的枚举类来帮助大家理解:

代码语言:javascript
复制
    /** * 试题类型 枚举类; 0 填空题、1 判断 题、2 单选题、3 多选题、4 简答题、5 问答题、6 论述题、7 计算题、8 画图题、9 其他题 * @date 2022/08/31 */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():返回两个次序相减后的结果。

阅读原文

了解老九学堂线下高薪就业班详情

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老九学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档