java枚举

https://www.cnblogs.com/hyl8218/p/5088287.htmlhtml

摘抄并自查java

 

 

语法(定义)ide

  建立枚举类型要使用 enum 关键字,隐含了所建立的类型都是 java.lang.Enum 类的子类。枚举类符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每一个值的名称都被转换成一个字符串,而且序数设置标示量此设置被建立的顺序。函数

public enum EnumTest{ MON, TUE, WED, THU, FRI, SAT, SUN; }

 

 

遍历、witch 等经常使用操做this

public class Test { public static void main(String[] args){ for(EnumTest e : EnumTest.values()){ } EnumTest test = EnumTest.TUE; witch(test){ case MON: System.out.println("今天是星期一"); } } }

 

 

enum 对象的经常使用方法spa

  int compareTo(E o)   ——  比较此枚举与指定对象的顺序code

 

  String name()  ——  返回此枚举常量的名称,在其枚举声明中对其进行声明htm

 

  String ordinal()  ——  返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)对象

 

  static <T extends Enum<T>> T valuesOf(Class<T> enumType, String name) —— 返回带指定名称的指定枚举类型的枚举常量。blog

 

 

给 enum 自定义属性和方法

 

给 enum 对象加一下 value 属性和 getValue() 的方法(上面是name,这里是 value

public enum EnumTest { MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) { @Override public boolean isRest() { return true; } }, SUN(0) { @Override public boolean isRest() { return true; } }; private int value; private EnumTest(int value) { this.value = value; } public int getValue() { return value; } public boolean isRest() { return false; } }

  这里注意语法格式    

 

EnumSet,EnumMap 的应用

public class Test { public static void main(String[] args) { // EnumSet的使用
        EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class); for (EnumTest day : weekSet) { System.out.println(day); } // EnumMap的使用
        EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class); weekMap.put(EnumTest.MON, "星期一"); weekMap.put(EnumTest.TUE, "星期二"); // ... ...
        for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) { Entry<EnumTest, String> entry = iter.next(); System.out.println(entry.getKey().name() + ":" + entry.getValue()); } } }

 

 

原理分析

 

  enum 的语法结构尽管和 class 的语法不同,可是通过编译器编译后产生的是一个 class 文件。该 class 文件通过反编译能够看出是生成了一个类,该类继承了 java.lang.Enum<E>。

 

 

总结

 

  能够把 enum 当作一个普通的 class ,他们均可以定义一些属性和方法,不一样之处是:enum 不能使用 extend 关键字继承其余类,由于 enum 已经继承了  java.lang.Enum (java 是单继承)

相关文章
相关标签/搜索