【JAVA开发小技巧】使用enum枚举类规范化代码

本文介绍了Java枚举类的应用场景,包括变量值范围有限且有额外属性的情况。详细讲解了枚举类的封装方法如name()、toString()、ordinal()和valueOf(),以及values()方法的使用示例。特别提到了在性能需求高的场景中其他数据结构的选择。
摘要由CSDN通过智能技术生成


前言

阿里巴巴Java开发手册中推荐,如果常量类中变量值仅在一个范围内变化,且带有名称之外的延伸属性, 建议定义为枚举类。使用枚举类可以使我们的代码更加规范且美观。


一、什么情况下可以使用枚举类?

变量值仅在一个范围内变化,且带有名称之外的延伸属性时,可以将这些变量存入一个枚举类当中。

使用场景例如:键值确定的字典,是和否,其它业务场景。
其它业务场景,例如:一星期七天枚举类

public enum WeekEnums 
{ 
  OTHER, 
  MONDAY, 
  TUESDAY, 
  WEDNESDAY, 
  THURSDAY, 
  FRIDAY, 
  SATURDAY,
  SUNDAY;
}

由于枚举类的下标是从0开始算起的,另一个OTHER占位,这样的话,星期一到七就对应下标1~7。

不过,在对性能要求比较高的接口中,键值对字典最好还是使用专门且高效的set和map实现。


二、枚举类封装方法列举

直接读取枚举类的常量,例如WeekEnums.MONDAY返回的对象类型是WeekEnums类,这个类型对于业务上来说基本没有意义,我们主要还是要用到枚举类的封装方法来实现我们的需求。

1.name()和toString()方法

这两个方法都是返回此枚举常量的名称,大多数情况下我们应该使用toString()方法,因为toString方法会返回一个更加用户友好的名称。name()方法主要用于专门的情况,其中正确性取决于获得确切的名称。

2.ordinal()方法

返回此枚举常数的序数(即常量的下标,下标从零开始记)。

3.valueOf()方法和values()方法

public static T valueOf(String)方法返回具有指定名称的指定枚举类型的枚举常量的名称。该方法几乎没有用处,既然参数已经传了名称,返回的结果却和参数一模一样,唯一的用处是用来判断字符串是否是枚举的一个常量名称。
values()方法则是返回枚举常量的数组,通过数组下标索引可以返回指定的枚举常量,该枚举常量可以调用前面两点提到的方法返回需要的结果。


三、使用举例

1、获取星期枚举类下标

System.out.println(WeekEnums.MONDAY.ordinal());            // 0
System.out.println(WeekEnums.TUESDAY.ordinal());    // 1

或者

System.out.println(WeekEnums.values()[0].ordinal());        // 0
System.out.println(WeekEnums.values()[1].ordinal());        // 1

2、获取枚举常量名称

System.out.println(WeekEnums.MONDAY.toString());            // MONDAY
System.out.println(WeekEnums.TUESDAY.toString());   	 //TUESDAY

或者

System.out.println(WeekEnums.valueOf("MONDAY"));            //MONDAY
System.out.println(WeekEnums.valueOf("TUESDAY"));   	 //TUESDAY

3、遍历枚举类,组成键值对

Map<String, Integer> map = new HashMap<>();     //枚举常量字符串与下标键值对
int length = WeekEnums.values().length;
for(int i = 0; i < length; i++){
	map.put(WeekEnums.values()[i].toString(), WeekEnums.values()[i].ordinal());    	
}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值