Java 枚举(enum) 7种常见的用法
在JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static final.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
public enum Color { RED, GREEN, BLANK, YELLOW }
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }
用法三:向枚举中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。
Java 枚举(enum) 详解7种常见的用法_请叫我大师兄-CSDN博客_枚举类型enum用法
public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.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; } }
用法四:覆盖枚举的方法
public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //覆盖方法 @Override public String toString() { return this.index+"_"+this.name; } }
用法五:实现接口
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour{ RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //接口方法 @Override public String getInfo() { return this.name; } //接口方法 @Override public void print() { System.out.println(this.index+":"+this.name); } }
用法六:使用接口组织枚举
public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO } } /*** 测试继承接口的枚举的使用(by 大师兄 or 大湿胸。)*/private static void testImplementsInterface() {for (Food.DessertEnum dessertEnum : Food.DessertEnum.values()) {System.out.print(dessertEnum + " ");}System.out.println();//我这地方这么写,是因为我在自己测试的时候,把这个coffee单独到一个文件去实现那个food接口,而不是在那个接口的内部。for (CoffeeEnum coffee : CoffeeEnum.values()) {System.out.print(coffee + " ");}System.out.println();//搞个实现接口,来组织枚举,简单讲,就是分类吧。如果大量使用枚举的话,这么干,在写代码的时候,就很方便调用啦。//还有就是个“多态”的功能吧,Food food = Food.DessertEnum.CAKE;System.out.println(food);food = CoffeeEnum.BLACK_COFFEE;System.out.println(food);}
用法七:关于枚举集合的使用
package com.lxk.enumTest;/*** Java枚举用法测试* <p>* Created by lxk on 2016/12/15*/public class EnumTest {public static void main(String[] args) {forEnum();useEnumInJava();}/*** 循环枚举,输出ordinal属性;若枚举有内部属性,则也输出。(说的就是我定义的TYPE类型的枚举的typeName属性)*/private static void forEnum() {for (SimpleEnum simpleEnum : SimpleEnum.values()) {System.out.println(simpleEnum + " ordinal " + simpleEnum.ordinal());}System.out.println("------------------");for (TYPE type : TYPE.values()) {System.out.println("type = " + type + " type.name = " + type.name() + " typeName = " + type.getTypeName() + " ordinal = " + type.ordinal());}}/*** 在Java代码使用枚举*/private static void useEnumInJava() {String typeName = "f5";TYPE type = TYPE.fromTypeName(typeName);if (TYPE.BALANCE.equals(type)) {System.out.println("根据字符串获得的枚举类型实例跟枚举常量一致");} else {System.out.println("大师兄代码错误");}}/*** 季节枚举(不带参数的枚举常量)这个是最简单的枚举使用实例* Ordinal 属性,对应的就是排列顺序,从0开始。*/private enum SimpleEnum {SPRING,SUMMER,AUTUMN,WINTER}/*** 常用类型(带参数的枚举常量,这个只是在书上不常见,实际使用还是很多的,看懂这个,使用就不是问题啦。)*/private enum TYPE {FIREWALL("firewall"),SECRET("secretMac"),BALANCE("f5");private String typeName;TYPE(String typeName) {this.typeName = typeName;}/*** 根据类型的名称,返回类型的枚举实例。** @param typeName 类型名称*/public static TYPE fromTypeName(String typeName) {for (TYPE type : TYPE.values()) {if (type.getTypeName().equals(typeName)) {return type;}}return null;}public String getTypeName() {return this.typeName;}}}
简单的例子,大家基本都用过,看不懂的基本都是第二个例子。可以看到,在第二个例子里面,后面带有参数,其实可以这么理解。
enum这个关键字,可以理解为跟class差不多,这也个单独的类。可以看到,上面的例子里面有属性,有构造方法,有getter,也可以有setter,但是一般都是构造传参数。还有其他自定义方法。
那么在这些东西前面的,以逗号隔开的,最后以分号结尾的,这部分叫做,这个枚举的实例。
也可以理解为,class new 出来的实例对象。这下就好理解了。
只是,class,new对象,可以自己随便new,想几个就几个,而这个enum关键字,他就不行,他的实例对象,只能在这个enum里面体现。
我上面的例子,就是根据typeName,你可以从那些例子里面挑选到唯一的一个TYPE类型的枚举实例--TYPE.BALANCE。注意方法
TYPE type = TYPE.fromTypeName(typeName);
这个方法的返回类型就是这个TYPE枚举类型的。
这下就好理解,这个枚举是怎么在工作了吧
上面那个带参数的枚举类型的实例里面实际上是三个属性,除了我自定义的typeName以外,还有2个是系统自带的。看下面源码的图:
看到这里之后,不知道你能不能理解下面图片内说明的话:下面图片主要说明在使用枚举时,的规范和标准。希望可以在实际开发时候用到
Java 枚举(enum) 7种常见的用法相关推荐
- Java枚举(enum)常用的用法总结
Java枚举[enum] Java枚举(enum)七种常见的用法汇总如下: 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组 ...
- Java 枚举(1): 详解7种常见的用法
目录 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组织枚举 用法七:关于枚举集合的使用 JDK1.5引入了新的类型--枚举 ...
- java switch enum对象_Java枚举类(enum)5种常见用法和3种内部方法,详细附代码
文章目录 Java枚举类(enum)重点用法和内部方法,附代码 一.Java 枚举类(enum) 详解5种常见的用法 1.常量 2.支持switch 3.向枚举中添加新方法 4.覆盖枚举的方法 5.实 ...
- Java的几种常见接口用法
2019独角兽企业重金招聘Python工程师标准>>> Java的几种常见接口用法 今天在看阎宏的< Java与模式>,里面对 java的 几种 接口的常用方法的总结: ...
- Java枚举(Enum)类型使用的正确姿势
关于Java Enum的介绍及原理参见 Java枚举(Enum)类型的基本介绍与原理探求 Enum类型的基本使用 定义一个枚举类的主要作用就是在逻辑代码中对某个变量的值进行比较.同样以季节的枚举类Se ...
- Java 枚举(enum) 详解7种常见的用法<详细>
JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 大师兄我[大师兄]又加上自己的理解,来帮助各位理解一下 ...
- Java 枚举(enum) 详解7种常见的用法
JDK1.5引入了新的类型--枚举.在 Java 中它虽然算个"小"功能,却给我的开发带来了"大"方便. 大师兄我[大师兄]又加上自己的理解,来帮助各位理解一下 ...
- Java 枚举(enum) 详解7种常见的用法-小白笔记
目录 用法一:常量 用法二:switch 用法三:向枚举中添加新方法 用法四:覆盖枚举的方法 用法五:实现接口 用法六:使用接口组织枚举 用法七:关于枚举集合的使用 用法一:常量 在JDK1.5 之前 ...
- 枚举(enum) 详解7种常见的用法
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static final.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. J ...
最新文章
- (七)Amazon Lightsail 部署LAMP应用程序之清除已安装服务
- Kubernetes集群安全概述
- WEB安全基础-命令注入
- java程序员 css_好程序员Web前端分享前端CSS篇
- Android应用程序启动Binder线程源码分析
- 设计学生证信息管理系统(C++实现,附源代码,详细解析)
- Leetcode 946.验证栈序列
- 飘刃 v0.0.10 首次发布,超快执行速度的 Vue 项目构建工具
- SAP Open SQL
- Frogger(图论,最短路径)
- ERP项目实施方法论
- 基本的LC串联和并联振荡电路分析
- 糖醋鲤鱼——经典美食
- linux 模块 掉线重拨,arm中实现pppd连接GPRS上网的相关笔记,含GPRS自动拨号脚本(真正的实时监控,断线自动重拨)...
- Office Word 孤行控制
- IoT物联网平台如何实现设备全球分发、就近接入?
- 从猪和鸡的故事看Scrum Master职责
- Python3,仅仅2段代码,就实现项目代码自动上传及部署,再也不需要Jenkins了。
- TCRT5000 红外测距使用解析
- 【元宇宙欧米说】一个科幻 NFT,一场关于创作者经济的探索
热门文章
- 分享71个PHP源代码总有一个是你想要的 分享71个PHP源代码,总有一款适合你
- 换张 SIM 卡就能用上「量子密话」?中国电信的新服务是黑科技还是智商税
- MySQL 5.7.10最新版本源代码安装详细过程
- 在PC上安装handset版meego的qemu虚拟机
- 使用python在excel表格中增加新的sheet表
- PID调节C语言解析
- WiFi连上了,却上不了网,请看这里
- qiankun 传统项目配置_qiankun配置父子应用及挂载问题
- 大规模分布式存储系统:原理解析与架构实战
- 单源路径分支界限java_单源最短路径-分支界限法