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

网友投稿 374 2022-07-23


目录什么是枚举为什么需要枚举类枚举类的定义和使用

什么是枚举

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

为什么需要枚举类

下面就举例说明一下吧

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

public static final int WOMAN = 0;

public static final int MAN = 1;

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

2) 代码更优雅

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

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

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

枚举类的定义和使用

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

/**

* 试题类型 枚举类; 0 填空题、1 判断 题、2 单选题、3 多选题、4 简答题、5 问答题、6 论述题、7 计算题、8 画图题、9 其他题

* @author lyy

* @datehttp:// 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 StdrsTLring 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 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

drsTL * @return 枚举对象数组

*/

public static List> toList() {

List> list = new ArrayList<>();

for (TopicTypeEnum item : TopicTypeEnum.values()) {

Map 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():返回两个次序相减后的结果。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于Feign的覆写默认配置和Feign的日志
下一篇:使用Feign logging 开启调用日志
相关文章

 发表评论

暂时没有评论,来抢沙发吧~