Java编程枚举类实战代码分享

 更新时间:2017年11月30日 14:57:29   作者:莼黑色  
这篇文章主要介绍了Java编程枚举类实战代码分享,具有一定借鉴价值,需要的朋友可以了解下。

本文句句走心,希望老铁们用心阅读并实战,一定会有收获的。

摘要:本文主要讨论生产环境中枚举类的使用。首先会通过对枚举类概念进行简单的介绍,引入我们讨论的主题;然后就直接进入实战部分,本文只会介绍在实战中用的比较多,也比较常用的情况,所以希望老铁可以用心体会并实践,最终化为己有;最后会大致在对枚举的 API 做了一个简单的介绍。其余没有介绍的内容,基本上在我们的生产环境中极少用到,如果有兴趣的可以自己在深入研究。

枚举

概念:枚举类型是 Java 5 中新增特性的一部分,它是一种特殊的数据类型,它的特点就是使我们的代码更加简洁,安全,从某种程度来说,使我们可以站在全局的角度更加清晰的理解业务逻辑(比如说一个订单的状态被我们定义成了枚举类之后,我们不用看业务逻辑代码,只需要从这个枚举类中都可以了解到我们这个订单的所有状态,给我们一种全局观的印象在脑海中,更利于后期代码的梳理。)

定义:首先使用 enum 来定义一个枚举类;然后每个枚举值(即声明的枚举)是使用逗号隔开,如果枚举值后面还有操作代码,那么在最后一个枚举值后面加上分号结尾;最后一定要记住,枚举类中声明的每一个值都是一个实例,也就是说有 n 个枚举值,构造函数就被调用 n 次来创建出 n 个枚举实例。这里举一个小例子看看:

enum SeasonType {
  SPRING, SUMMER, AUTUMN, WINTER;
  SeasonType() {
    System.out.println("看看此构造函数被调用了几次");
  }
}
public class Season {
  public static void main(String[] args) {
    System.out.println(SeasonType.SPRING);
  }
}

控制台输出:

看看此构造函数被调用了几次
看看此构造函数被调用了几次
看看此构造函数被调用了几次
看看此构造函数被调用了几次
SPRING

总结: 从这里可以看出来,枚举类中声明的每一枚举值其实都调用了构造函数并创建了实例,简单理解就是: 每一个枚举值都是一个实例对象。

实战一无参

(1)定义一个无参枚举类

enum SeasonType {
  SPRING, SUMMER, AUTUMN, WINTER
}

(2)实战中的使用

// 根据实际情况选择下面的用法即可
SeasonType springType = SeasonType.SPRING;  // 输出 SPRING 
String springString = SeasonType.SPRING.toString();  // 输出 SPRING

实战二有一参

(1)定义只有一个参数的枚举类

enum SeasonType {
  // 通过构造函数传递参数并创建实例
  SPRING("spring"),
  SUMMER("summer"),
  AUTUMN("autumn"),
  WINTER("winter");

  // 定义实例对应的参数
  private String msg;

  // 必写:通过此构造器给枚举值创建实例
  SeasonType(String msg) {
    this.msg = msg;
  }

  // 通过此方法可以获取到对应实例的参数值
  public String getMsg() {
    return msg;
  }
}

(2)实战中的使用

// 当我们为某个实例类赋值的时候可使用如下方式
String msg = SeasonType.SPRING.getMsg();  // 输出 spring

实战三有两参

(1)定义有两个参数的枚举类

public enum Season {
  // 通过构造函数传递参数并创建实例
  SPRING(1, "spring"),
  SUMMER(2, "summer"),
  AUTUMN(3, "autumn"),
  WINTER(4, "winter");

  // 定义实例对应的参数
  private Integer key;
  private String msg;

  // 必写:通过此构造器给枚举值创建实例
  Season(Integer key, String msg) {
    this.key = key;
    this.msg = msg;
  }

  // 很多情况,我们可能从前端拿到的值是枚举类的 key ,然后就可以通过以下静态方法获取到对应枚举值
  public static Season valueofKey(Integer key) {
    for (Season season : Season.values()) {
      if (season.key.equals(key)) {
        return season;
      }
    }
    throw new IllegalArgumentException("No element matches " + key);
  }

  // 通过此方法可以获取到对应实例的 key 值
  public Integer getKey() {
    return key;
  }

  // 通过此方法可以获取到对应实例的 msg 值
  public String getMsg() {
    return msg;
  }
}

(2)实战中的使用

// 输出 key 为 1 的枚举值实例
Season season = Season.valueofKey(1);
// 输出 SPRING 实例对应的 key
Integer key = Season.SPRING.getKey();
// 输出 SPRING 实例对应的 msg
String msg = Season.SPRING.getMsg();

枚举类总结

其实枚举类懂了其概念后,枚举就变得相当简单了,随手就可以写一个枚举类出来。所以如上几个实战小例子一定要先搞清楚概念,然后在练习几遍就 ok 了。重要的概念,我在这里在赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举类中的枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例;并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数中的参数值肯定有 n 个,因为声明的每一个枚举值都会调用构造函数去创建实例,所以参数一定是一一对应的;既然明白了这一点,那么我们只需要在枚举类中把这 n 个参数定义为 n 个成员变量,然后提供对应的 get() 方法,之后通过实例就可以随意的获取实例中的任意参数值了。如果想让枚举类更加的好用,就可以模仿我在实战三中的写法那样,通过某一个参数值,比如 key 参数值,就能获取到其对应的枚举值,然后想要什么值,就 get 什么值就好了。

枚举 API

我们使用 enum 定义的枚举类都是继承 java.lang.Enum 类的,那么就会继承其 API ,常用的 API 如下:

String name()

获取枚举名称

int ordinal()

获取枚举的位置(下标,初始值为 0 )

valueof(String msg)

通过 msg 获取其对应的枚举类型。(比如实战二中的枚举类或其它枚举类都行,只要使用得当都可以使用此方法)

values()

获取枚举类中的所有枚举值(比如在实战三中就使用到了)

总结

以上就是本文关于Java编程枚举类实战代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Java实现动态代理的实例代码

    Java实现动态代理的实例代码

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等,这篇文章主要给大家介绍了关于Java实现动态代理的相关资料,需要的朋友可以参考下
    2021-09-09
  • Java访问WebService返回XML数据的方法

    Java访问WebService返回XML数据的方法

    这篇文章主要介绍了Java访问WebService返回XML数据的方法,涉及java操作WebService的相关技巧,需要的朋友可以参考下
    2015-06-06
  • SpringBoot用多线程批量导入数据库实现方法

    SpringBoot用多线程批量导入数据库实现方法

    这篇文章主要介绍了SpringBoot用多线程批量导入数据库实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Spring Boot构建优雅的RESTful接口过程详解

    Spring Boot构建优雅的RESTful接口过程详解

    这篇文章主要介绍了spring boot构建优雅的RESTful接口过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Springboot使用pdfbox提取PDF图片的代码示例

    Springboot使用pdfbox提取PDF图片的代码示例

    PDFBox是一个用于创建和处理PDF文档的Java库,它可以使用Java代码创建、读取、修改和提取PDF文档中的内容,本文就给大家介绍Springboot如何使用pdfbox提取PDF图片,感兴趣的同学可以借鉴参考
    2023-06-06
  • Spring中Cache的使用方法详解

    Spring中Cache的使用方法详解

    这篇文章主要介绍了Spring中Cache的使用方法详解,Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,需要的朋友可以参考下
    2024-01-01
  • Jenkins初级使用过程中的异常处理

    Jenkins初级使用过程中的异常处理

    这篇文章主要为大家介绍了Jenkins初级使用过程中的异常处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • idea git未提交代码文件名字变色(图解)

    idea git未提交代码文件名字变色(图解)

    这篇文章主要介绍了idea git未提交代码文件名字变色,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot整合MybatisPlus的基本应用详解

    SpringBoot整合MybatisPlus的基本应用详解

    MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生,本文将给大家介绍一下SpringBoot整合MybatisPlus的基本应用,需要的朋友可以参考下
    2024-05-05
  • Servlet实现多文件上传功能

    Servlet实现多文件上传功能

    这篇文章主要为大家详细介绍了Servlet实现文件上传功能,还可以实现Servlet多文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03

最新评论