package com.citi; 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()); } System.out.println("------------------"); for (TYPE2 type : TYPE2.values()) { System.out.println("type = " + type + " type.name = " + type.name() + " 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; } } private enum TYPE2 { FIREWALL("firewall"), SECRET("secretMac"), BALANCE("f5"); private String typeName; TYPE2(String typeName) { this.typeName = typeName; } @Override public String toString() { return this.typeName; } } }