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 是單繼承)

相關文章
相關標籤/搜索