Java 枚举(enum) 详解7种常见的用法
JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。
大师兄我又加上自己的理解,来帮助各位理解一下。
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
- 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 实例。
- 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;
- }
- }
用法四:覆盖枚举的方法
下面给出一个toString()方法覆盖的例子。
- 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);
- }
- }
用法六:使用接口组织枚举
Java代码
- 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);
- }
用法七:关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。
关于枚举的实现细节和原理请参考:
参考资料:《ThinkingInJava》第四版
http://softbeta.iteye.com/blog/1185573
我的这篇文章,因为是转载的,可能基本就没有变动,导致被某人踩了一脚。觉得不符合我大师兄的性格。下面我把自己的使用理解给整理一下。
也是因为因为当时刚刚开始学习吧。把平时自以为了解的东西都只是大概了解了一下,说到底,还是自以为了解了,其实转眼就不知道什么是什么了。
出来学习,不习惯看代码怎么能行呢?
下面是我自己的测试代码。
- 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里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围,举个栗子:一年四季,只能有春夏秋冬,你要是字符串表示的话,那就海了去了,但是,要用枚举类型的话,你在enum的大括号里面把所有的选项,全列出来,那么这个季节的属性,对应的值,只能在里面挑。不能有其他的。
我上面的例子,就是根据typeName,你可以从那些例子里面挑选到唯一的一个TYPE类型的枚举实例--TYPE.BALANCE。注意方法
TYPE type = TYPE.fromTypeName(typeName);
这个方法的返回类型就是这个TYPE枚举类型的。
这下就好理解,这个枚举是怎么在工作了吧
再补充一下:
上面那个带参数的枚举类型的实例里面实际上是三个属性,除了我自定义的typeName以外,还有2个是系统自带的。看下面源码的图:
看到这里之后,不知道你能不能理解下面图片内说明的话:下面图片主要说明在使用枚举时,的规范和标准。希望可以在实际开发时候用到
最后补充一点:
也许你知道呢,但是也许你不知道呢?我是真的不知道,测了之后才知道!!!
枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。
具体,请参考下面的链接:
2017.11.07 更新
有的老铁,说这个switch case怎么写,我就在下面再啰嗦一下。
- private static void testSwitchCase() {
- String typeName = "f5";
- //这几行注释呢,你可以试着三选一,测试一下效果。
- //String typeName = "firewall";
- //String typeName = "secretMac";
- TypeEnum typeEnum = TypeEnum.fromTypeName(typeName);
- if (typeEnum == null) {
- return;
- }
- switch (typeEnum) {
- case FIREWALL:
- System.out.println("枚举名称(即默认自带的属性 name 的值)是:" + typeEnum.name());
- System.out.println("排序值(默认自带的属性 ordinal 的值)是:" + typeEnum.ordinal());
- System.out.println("枚举的自定义属性 typeName 的值是:" + typeEnum.getTypeName());
- break;
- case SECRET:
- System.out.println("枚举名称(即默认自带的属性 name 的值)是:" + typeEnum.name());
- System.out.println("排序值(默认自带的属性 ordinal 的值)是:" + typeEnum.ordinal());
- System.out.println("枚举的自定义属性 typeName 的值是:" + typeEnum.getTypeName());
- break;
- case BALANCE:
- System.out.println("枚举名称(即默认自带的属性 name 的值)是:" + typeEnum.name());
- System.out.println("排序值(默认自带的属性 ordinal 的值)是:" + typeEnum.ordinal());
- System.out.println("枚举的自定义属性 typeName 的值是:" + typeEnum.getTypeName());
- break;
- default:
- System.out.println("default");
- }
- }
然后,就是运行结果的截图。
老铁们,看完这个枚举,你要懂个概念,那就是,这个枚举,他是个对象,就像你定义的Student类,Person类,等等一些个类一样。
要有这么个概念。只要是个类,他就可以有构造函数,可以有属性,可以有方法。
对的,老铁,你对这个属性,构造函数啥的,有概念吧,没有的话,我可就郁闷啦。
然后,你就看到,这个地方有2个默认的属性,一个是name,一个是ordinal,这2个属性就像你定义Student类和Person类的name和age一样,
只不过,这2个是系统自带的属性,不用你自己去定义啦。
你也可以给这个枚举类,也就是你自己声明的枚举,随便加属性。
我上面代码例子里面的那个TypeEnum那个枚举,就是这么干的,就简单的添加了个自定义属性typeName,
虽然他有自己的name了,那姑且叫我这个自定义的属性叫别名吧。
可以看到,我例子里面就是通过自己写的那个构造方法给我这个自定义的属性初始化值的。
还有,这个构造方法是不可以,也不被运行public的,不信,你可以试试。
还有,你不能对系统自带的name属性,在构造函数里面赋值,没有为什么。
-
LittleLawson2018-05-15 11:54:43#34楼博主并没有介绍这么多种用法的具体目的,用在哪些场景?只是单纯的叙述语法【而且不完整】。建议修改,否则不符合大师兄的身份【做二师兄吧,逃~】
-
guo_wen_qiang2018-05-02 16:18:41#33楼go go
-
麦洛乄2018-04-20 23:04:22#32楼早安查看回复(1)
-
1yef2018-04-17 08:46:40#31楼think in java介绍的很详细查看回复(1)
-
蛋蛋糊涂2018-04-01 20:57:54#30楼枚举对象可以使用==比较是因为,枚举里面所有变量都是16进制封装的一个数据,唯一的! 这是我看了反编译的看到的!我原以为是哈希值最后打印哈希值,不一样,是什么值,我也不知道!查看回复(1)
深入理解Java枚举类型(enum)
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/71333103 出自【...
枚举怎么使用 - CSDN博客
问题描述:数据库中有字段表示汽车访问的某一服务,比如1表示登陆,2表示POI。给前端要给登陆或POI,不能给1或2这些数字。解决方案:定义一个枚举方法,里面写通过数字...
2018-3-23
枚举的使用 - CSDN博客
现有一需求,知道一地区编码,我想知道对应这个地区的名称。现有数据如下:经过一番思考,准备用枚举来做这个功能。新建一枚举类如下:生成getter,setter.重写一构造...
2018-3-6
java enum(枚举)理解
下面我在使用enum过程中一些经验和总结,主要包括如下内容: 1.原始的接口定义变量 2.语法(定义) 3.遍历 ,swich等常用操作 4.enum对象的常用方法介绍 5.给enum自定义...
java 枚举——java中枚举的运用和使用场景 - CSDN博客
2018-5-8
枚举的用法 - CSDN博客
它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是...
2018-4-21
枚举的使用 - CSDN博客
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月...
2018-5-10
【转载】为什么枚举可以直接使用== - CSDN博客
所以,当我看到别人的代码中,枚举类型变量,直接使用==,来判断是不是相等,很是诧异。然后就有了下面的调查和测试。 先看测试代码: [java] view plain ...
2018-4-16
如何正确使用枚举 - CSDN博客
枚举类型,对程序员来说再熟悉不过了,但是,你确定你在正确得使用它吗? 在用枚举之前,让我们来区分一下状态和选项这两个概念。 状态:同时只能有一种。比如:一...
2018-4-12
JAVA中enum使用方法
注意查看结果,STATUSCODE尤为重要 package com.enumtest; public enum RESULTMAP { SUCCESS(200,"返回正确结果"),INPUT_...
Java enum关键字用法小结
enum 指枚举类型,但其与C语言的用法,是有很大不同的。在C语言中,我们一般用enum来定义一组相关的常量。而在Java中,enum能做的事,可远远不止于此。 要了解Java中的enum如何用...
java枚举
枚举是比较简单的,直接上代码,看下就好~package study.contast; /** * java枚举 */ public enum BookEnum{ YUWEN("...
JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。
大师兄我又加上自己的理解,来帮助各位理解一下。
用法一:常量
在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
- 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 实例。
- 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;
- }
- }
用法四:覆盖枚举的方法
下面给出一个toString()方法覆盖的例子。
- 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);
- }
- }
用法六:使用接口组织枚举
Java代码
- 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);
- }
用法七:关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。
关于枚举的实现细节和原理请参考:
参考资料:《ThinkingInJava》第四版
http://softbeta.iteye.com/blog/1185573
我的这篇文章,因为是转载的,可能基本就没有变动,导致被某人踩了一脚。觉得不符合我大师兄的性格。下面我把自己的使用理解给整理一下。
也是因为因为当时刚刚开始学习吧。把平时自以为了解的东西都只是大概了解了一下,说到底,还是自以为了解了,其实转眼就不知道什么是什么了。
出来学习,不习惯看代码怎么能行呢?
下面是我自己的测试代码。
- 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里面体现。也就是说,他对应的实例是有限的。这也就是枚举的好处了,限制了某些东西的范围,举个栗子:一年四季,只能有春夏秋冬,你要是字符串表示的话,那就海了去了,但是,要用枚举类型的话,你在enum的大括号里面把所有的选项,全列出来,那么这个季节的属性,对应的值,只能在里面挑。不能有其他的。
我上面的例子,就是根据typeName,你可以从那些例子里面挑选到唯一的一个TYPE类型的枚举实例--TYPE.BALANCE。注意方法
TYPE type = TYPE.fromTypeName(typeName);
这个方法的返回类型就是这个TYPE枚举类型的。
这下就好理解,这个枚举是怎么在工作了吧
再补充一下:
上面那个带参数的枚举类型的实例里面实际上是三个属性,除了我自定义的typeName以外,还有2个是系统自带的。看下面源码的图:
看到这里之后,不知道你能不能理解下面图片内说明的话:下面图片主要说明在使用枚举时,的规范和标准。希望可以在实际开发时候用到
最后补充一点:
也许你知道呢,但是也许你不知道呢?我是真的不知道,测了之后才知道!!!
枚举类型对象之间的值比较,是可以使用==,直接来比较值,是否相等的,不是必须使用equals方法的哟。
具体,请参考下面的链接:
2017.11.07 更新
有的老铁,说这个switch case怎么写,我就在下面再啰嗦一下。
- private static void testSwitchCase() {
- String typeName = "f5";
- //这几行注释呢,你可以试着三选一,测试一下效果。
- //String typeName = "firewall";
- //String typeName = "secretMac";
- TypeEnum typeEnum = TypeEnum.fromTypeName(typeName);
- if (typeEnum == null) {
- return;
- }
- switch (typeEnum) {
- case FIREWALL:
- System.out.println("枚举名称(即默认自带的属性 name 的值)是:" + typeEnum.name());
- System.out.println("排序值(默认自带的属性 ordinal 的值)是:" + typeEnum.ordinal());
- System.out.println("枚举的自定义属性 typeName 的值是:" + typeEnum.getTypeName());
- break;
- case SECRET:
- System.out.println("枚举名称(即默认自带的属性 name 的值)是:" + typeEnum.name());
- System.out.println("排序值(默认自带的属性 ordinal 的值)是:" + typeEnum.ordinal());
- System.out.println("枚举的自定义属性 typeName 的值是:" + typeEnum.getTypeName());
- break;
- case BALANCE:
- System.out.println("枚举名称(即默认自带的属性 name 的值)是:" + typeEnum.name());
- System.out.println("排序值(默认自带的属性 ordinal 的值)是:" + typeEnum.ordinal());
- System.out.println("枚举的自定义属性 typeName 的值是:" + typeEnum.getTypeName());
- break;
- default:
- System.out.println("default");
- }
- }
然后,就是运行结果的截图。
老铁们,看完这个枚举,你要懂个概念,那就是,这个枚举,他是个对象,就像你定义的Student类,Person类,等等一些个类一样。
要有这么个概念。只要是个类,他就可以有构造函数,可以有属性,可以有方法。
对的,老铁,你对这个属性,构造函数啥的,有概念吧,没有的话,我可就郁闷啦。
然后,你就看到,这个地方有2个默认的属性,一个是name,一个是ordinal,这2个属性就像你定义Student类和Person类的name和age一样,
只不过,这2个是系统自带的属性,不用你自己去定义啦。
你也可以给这个枚举类,也就是你自己声明的枚举,随便加属性。
我上面代码例子里面的那个TypeEnum那个枚举,就是这么干的,就简单的添加了个自定义属性typeName,
虽然他有自己的name了,那姑且叫我这个自定义的属性叫别名吧。
可以看到,我例子里面就是通过自己写的那个构造方法给我这个自定义的属性初始化值的。
还有,这个构造方法是不可以,也不被运行public的,不信,你可以试试。
还有,你不能对系统自带的name属性,在构造函数里面赋值,没有为什么。