1. 当你创建一个enum类时,编译器会为你生成一个相关的类,这个类继承自Enum
/** * 枚举类默认继承的java.lang.Enum类(编译器控制),所以不能再继承其它类 * Enum实现了 Comparable<E>, Serializable 接口 */ public enum MeiJu { MEIJU1, MEIJU2, MEIJU3, MEIJU4 }
public class Test { public static void main(String[] args) { // 注意这里已经向上转型了哦 for (Enum<MeiJu> meiju : MeiJu.values()) { // ------------------下面都是父类(Enum)提供的方法-------------------- // 返回枚举常量的序数ordinal,final修饰,不可变,按声明时的顺序 System.err.println("ordinal():" + meiju.ordinal()); // 输出:0 、1 、 2、3 // 返回枚举常量的名称name,final修饰,不可变 // 跟meiju.toString()返回内容是一样的:都是 return this.name; // 不过如果使用toString(),可以对其重写 System.err.println("name():" + meiju.name()); // 输出: MEIJU1 、MEIJU2 、MEIJU3、MEIJU4 // 只能比较同一枚举类下的枚举常量,so 比较的是声明顺序ordinal System.err.println("compareTo():" + meiju.compareTo(MeiJu.MEIJU2)); // 输出 -1 、0 、1、2 // 返回 return this == MeiJu.MEIJU2; System.err.println("equals():" + meiju.equals(MeiJu.MEIJU2)); // 输出:false true false false // 跟这个结果一样meiju.getClass(),没有找到不一样的情况 ?? System.err.println("getDeclaringClass():" + meiju.getDeclaringClass()); // 输出:都是 class package.MeiJu // 还有一个 hashCode() 它返回的是 super.hashCode(); // Enum 的 super 就是 Object 了 // 搞不明白这玩意干什么用 MeiJu valueOf = Enum.valueOf(meiju.getDeclaringClass(),meiju.name()); // 其它就没什么了吧。。。。上面蓝色字体略掉了 } } }
细心人士,会发现上面的代码中,我并没有给枚举类MeiJu添加方法,而且Enum中也没有values()方法。原因看下面两个图片比较一下
2. 给枚举定义方法,记得在枚举常量后面加";"
public enum MeiJu { //定义每个枚举实例,如果有构造方法,必须通过构造方法初始化定义; MEIJU1("husband"), MEIJU2("wife"), MEIJU3("son"), MEIJU4("xiaosan"); private String property; //属性 private MeiJu(String property) { //只能在内部使用 this.property = property; } @Override public String toString() { return name() + ":" + property; } public static void main(String[] args) { for (MeiJu meiju : MeiJu.values()) { System.err.println( meiju.toString()); } } }
输出:
MEIJU1:husband
MEIJU2:wife
MEIJU3:son
MEIJU4:xiaosan
3. 枚举使用 switch
public class Test { public String test(MeiJu meiju) { switch (meiju) { case MEIJU1 : return meiju.toString(); case MEIJU2 : return meiju.toString(); case MEIJU3 : return meiju.toString(); case MEIJU4 : return meiju.toString(); default :return ""; } } public static void main(String[] args) { Test t = new Test(); System.err.println(t.test(MeiJu.MEIJU4)); } }
输出:MEIJU4:xiaosan
4. Class还给枚举类弄了个专属武器getEnumConstants(),所以即使在enum被向上转型也能得到其所有实例。
public class Test { public void test(Enum<?> meiju) { // 注意:Enum是没有 meiju.values() 方法的。 // 不过Class中有方法getEnumConstants()可以得到枚举所有实例 for (Enum<?> en : meiju.getClass().getEnumConstants()) { System.err.println(en.toString());// 覆盖后的toString } } public static void main(String[] args) { Test t = new Test(); t.test(MeiJu.MEIJU4); } }
public class Test { // 上面方法的扩展 public <E extends Enum<E>> void test(Class<E> meiju) { // 泛型 参考上一篇 java泛型 for (E en : meiju.getEnumConstants()) { System.err.println(en.toString()); } } public static void main(String[] args) { Test t = new Test(); t.test(MeiJu.MEIJU4.getDeclaringClass()); // t.test(MeiJu.MEIJU4.getClass()); //这样就不行了 t.test((Class) MeiJu.MEIJU4.getClass());// 这样可以,但是一堆警告 } }
输出:
MEIJU1:husband
MEIJU2:wife
MEIJU3:son
MEIJU4:xiaosan
5. 通过枚举管理枚举
public enum MeiJu { ;//注意这里有个";" enum MeiJu1 {A, B, C} enum MeiJu2 {D, E, F} public static void main(String[] args) { for (MeiJu1 meiju1 : MeiJu.MeiJu1.values()) { System.err.print(meiju1); //输出:ABC } } }
6.EnumSet现在是个抽象类(JavaSE 7),EnumMap不是 ,不行了搞不动了。。这就研究到这了
相关推荐
NULL 博文链接:https://rensanning.iteye.com/blog/2013734
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料); java 枚举(enum) 详解(学习资料);
java enum详细教程。由浅入深,包括基本语法方面..很适合新手学习。/n各位看官。绝对超值。
java中enum枚举的详细用法。 0.0
NULL 博文链接:https://janeky.iteye.com/blog/463611
java枚举类型的定义使用介绍,还有示例。
java枚举小例子,简单了解枚举的用法,适合初学者使用。
全面掌握java枚举类型(enum-type)1
enum枚举的方法
Java 枚举(enum) Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 ...
主要给大家介绍了关于Java的枚举enum的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
Java中的枚举类型Enum示例源代码,详见http://blog.csdn.net/snarlfuture/article/details/18996037
主要介绍了Java枚举类enum介绍,和其它普通类一样,enum同样可以有成员变量、方法、构造器,也可以实现一个或多个接口,需要的朋友可以参考下
ava enum 枚举的spring boot2.x完美实现demo源码。java的枚举类型,可以理解为一种特殊的java类
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
主要介绍了java 中枚举类enum的values()方法的详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下
java enum枚举教程学习资料
本文详尽地论述了Java枚举与设计模式的关系
java高级编程 Enum枚举 包括枚举的例子,问题 及一些文档,是复习的好资源