在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外。然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看。

1、可以在enum中添加变量和方法

先来看一段代码示例:

public enum State {Normal("正常态", 1), Update("已更新", 2), Deleted("已删除", 3), Fired("已屏蔽", 4);// 成员变量private String name;private int index;// 构造方法,注意:构造方法不能为public,因为enum并不可以被实例化private State(String name, int index) {this.name = name;this.index = index;}// 普通方法public static String getName(int index) {for (State c : State .values()) {if (c.getIndex() == index) {return c.name;}}return null;}// get set 方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}}

从上面的代码中我们可以看到,定义完枚举值,然后在其后面加上分号,接着就可以定义其他的变量、方法了。另外需要特别说明的是,enum中的构造方法不可以用public标识,这样做是为了防止用户实例化enum。

2、可以用来定义常量

先来回顾一下Java中如何定义常量吧,看下面一段代码:

public static final int normalState = 1;
private static final int updateState = 2;

下面我们还可以用enum枚举来代替上面的常量定义,代码如下:

public enum State {  Normal, Update, Deleted, Fired
}

在Java中用enum来定义常量在语法上没有什么优势,但是enum枚举类型可以提供更多的操作功能。

3、在enum中实现接口

先来看下面一段代码:

public interface ICanReadState {void read();String getState();
}public enum State implements ICanReadState {Normal("正常态", 1), Update("已更新", 2), Deleted("已删除", 3), Fired("已屏蔽", 4);private String name;private int index;private State(String name, int index) {this.name = name;this.index = index;}// 接口方法1@Overridepublic String getState() {return this.name;}// 接口方法2@Overridepublic void read() {System.out.println(this.index + ":" + this.name);}}

和一般的类中使用接口一样,enum枚举中同样可以继承接口,并实现接口中的所有方法,这样做的好处在于可以更方便地对枚举中的值进行排序、比较等操作,封装性更好。

总结

说白了,enum枚举类型是一个不可以被继承的final类,就以上面的State枚举为例,如果你查看enum类型的字节码,其实是State类型的类静态常量。

Java中的enum详细解析------Java enum 枚举还可以这么用相关推荐

  1. Java中的enum详细解析------Java 语言中 Enum 类型的使用介绍

    Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...

  2. java 内存排序_详细解析Java内存,处理器重排序,编译器重排序以及它对线程的影响...

    欢迎大家搜索"小猴子的技术笔记"关注我的公众号,有问题可以及时和我交流. 我们在编写程序的时候有一个编写代码的顺序,那么计算机执行的时候就是按照我们编写代码的顺序来执行的吗?答案是 ...

  3. Java中的static关键字解析 转载

    原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...

  4. [转] Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  5. 【Java学习笔记之十五】Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  6. Java中的泛型全解析(二)

    Java中的泛型全解析(一) 泛型中的约束和局限性 现在我们有泛型类 不能用基本类型实例化类型参数 运行时类型查询只适用于原始类型 泛型类的静态上下文中类型变量失效 不能在静态域或方法中引用类型变量. ...

  7. Java中的泛型全解析(一)

    为什么我们需要泛型? 通过两段代码我们就可以知道为何我们需要泛型 实际开发中,经常有数值类型求和的需求,例如实现int类型的加法, 有时候还需要实现long类型的求和, 如果还需要double类型的求 ...

  8. Java中四种XML解析技术之不完全测试

    Java中四种XML解析技术之不完全测试 <script language=javascript src=""></script> 在平时工作中,难免会遇到 ...

  9. java中的jpa_JPA教程–在Java SE环境中设置JPA

    java中的jpa JPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法. 我们可以将其视为类似于Hibernate之类的 ...

最新文章

  1. Effective C++学习笔记(Part Five:Item 26-31)
  2. c++人脸特征保存到本地_尚邦小规模人脸识别布控系统
  3. python如何读取文件内容求和_使用python对文件中的数值进行累加的实例
  4. 朴素贝叶斯实现分类_关于朴素贝叶斯分类及其实现的简短教程
  5. POJ 1753 Flip Game(回溯)
  6. scala 去除重复元素_Scala程序从列表中删除重复项
  7. c#中dateTimePicker怎么获取当前的日期
  8. 麦当劳降价“过冬” 一夜回到十年前(转)
  9. 【语义分割】数据增强方法(原图与标签同时扩增)
  10. mysql主备(centos6.4)
  11. 因果推断笔记——uplift建模、meta元学习、Class Transformation Method(八)
  12. ArcMap制作城市道路网壁纸(OSM道路数据下载)
  13. 手机访问电脑虚拟服务器,User Agent Switcher插件使用教程【电脑模拟手机访问网站】...
  14. python 基础-如何调用函数
  15. CSS3之position:sticky使用
  16. 杜比AC-3与DTS的音效对比 浅解
  17. 食品药品舆情传播规律分析
  18. 拼多多校招笔试题 避嫌抢劫
  19. 手写:下划线转为驼峰命名法
  20. 一个AI小白如何理解近似匹配检索

热门文章

  1. 华为第二批“十大军团”正式成立!
  2. 微信:进一步规范财经类自媒体帐号内容发布
  3. 苹果AirPods Max拼多多百亿补贴价来了:券后价3999元
  4. 上游供应链厂商确认高通已获准向华为出售4G芯片
  5. 2020年天猫双11:11日0点30分 实时成交额突破3723亿
  6. 华为已在国内建成20万5G基站 预计年底可达到80万
  7. 前魅族副总裁李楠上手魅族17:颜值提升了
  8. 强迫症告辞!三星Galaxy S11这“凌乱”的后置5摄,感受下
  9. 中国制造特斯拉亮相 中文车尾标亮了!网友:好抠吗?
  10. 百度高级副总裁沈抖加入爱奇艺董事会 王路退出