一、 通常定義常量方法
我們通常利用public final static 方法定義的代碼如下,分別用1 表示紅燈,3 表示綠燈,2 表示黃燈。
package com.csdn.myEnum;public class Light { /* 紅燈 */ public final static int RED =1; /* 綠燈 */ public final static int GREEN =3; /* 黃燈 */ public final static int YELLOW =2;}
二、 枚舉類型定義常量方法
枚舉類型的簡單定義方法如下,我們似乎沒辦法定義每個枚舉類型的值。比如我們定義紅燈、綠燈和黃燈的代碼可能如下:
public enum Light { RED , GREEN , YELLOW ;}
我們只能夠表示出紅燈、綠燈和黃燈,但是具體的值我們沒辦法表示出來。別急,既然枚舉類型提供了構(gòu)造函數(shù),我們可以通過構(gòu)造函數(shù)和覆寫toString 方法來實現(xiàn)。首先給Light 枚舉類型增加構(gòu)造方法,然后每個枚舉類型的值通過構(gòu)造函數(shù)傳入對應的參數(shù),同時覆寫toString 方法,在該方法中返回從構(gòu)造函數(shù)中傳入的參數(shù),改造后的代碼如下:
public enum Light { // 利用構(gòu)造函數(shù)傳參 RED (1), GREEN (3), YELLOW (2); // 定義私有變量 PRivate int nCode ; // 構(gòu)造函數(shù),枚舉類型只能為私有 private Light( int _nCode) { this . nCode = _nCode; } @Override public String toString() { return String.valueOf ( this . nCode ); } }
三、 完整示例代碼
枚舉類型的完整演示代碼如下:
package com.csdn.myEnum; import java.util.EnumMap;import java.util.EnumSet; public class LightTest { // 1. 定義枚舉類型 public enum Light { // 利用構(gòu)造函數(shù)傳參 RED (1), GREEN (3), YELLOW (2); // 定義私有變量 private int nCode ; // 構(gòu)造函數(shù),枚舉類型只能為私有 private Light( int _nCode) { this . nCode = _nCode; } @Override public String toString() { return String.valueOf ( this . nCode ); } } /** * @param args */ public static void main(String[] args ) { // 1. 遍歷枚舉類型 System. out .println( " 演示枚舉類型的遍歷 ......" ); testTraversalEnum (); // 2. 演示 EnumMap 對象的使用 System. out .println( " 演示 EnmuMap 對象的使用和遍歷 ....." ); testEnumMap (); // 3. 演示 EnmuSet 的使用 System. out .println( " 演示 EnmuSet 對象的使用和遍歷 ....." ); testEnumSet (); } /** * 演示枚舉類型的遍歷 */ private static void testTraversalEnum() { Light[] allLight = Light.values (); for (Light aLight : allLight) { System. out .println( " 當前燈 name : " + aLight.name()); System. out .println( " 當前燈 ordinal : " + aLight.ordinal()); System. out .println( " 當前燈: " + aLight); } } /** * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不過 key 要是枚舉類型 */ private static void testEnumMap() { // 1. 演示定義 EnumMap 對象, EnumMap 對象的構(gòu)造函數(shù)需要參數(shù)傳入 , 默認是 key 的類的類型 EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>( Light. class ); currEnumMap.put(Light. RED , " 紅燈 " ); currEnumMap.put(Light. GREEN , " 綠燈 " ); currEnumMap.put(Light. YELLOW , " 黃燈 " ); // 2. 遍歷對象 for (Light aLight : Light.values ()) { System. out .println( "[key=" + aLight.name() + ",value=" + currEnumMap.get(aLight) + "]" ); } } /** * 演示 EnumSet 如何使用, EnumSet 是一個抽象類,獲取一個類型的枚舉類型內(nèi)容 <BR/> * 可以使用 allOf 方法 */ private static void testEnumSet() { EnumSet<Light> currEnumSet = EnumSet.allOf (Light. class ); for (Light aLightSetElement : currEnumSet) { System. out .println( " 當前 EnumSet 中數(shù)據(jù)為: " + aLightSetElement); } }}
執(zhí)行結(jié)果如下:
演示枚舉類型的遍歷 ......當前燈 name : RED當前燈 ordinal : 0當前燈: 1當前燈 name : GREEN當前燈 ordinal : 1當前燈: 3當前燈 name : YELLOW當前燈 ordinal : 2當前燈: 2演示 EnmuMap 對象的使用和遍歷 .....[key=RED,value= 紅燈 ][key=GREEN,value= 綠燈 ][key=YELLOW,value= 黃燈 ]演示 EnmuSet 對象的使用和遍歷 .....當前 EnumSet 中數(shù)據(jù)為: 1當前 EnumSet 中數(shù)據(jù)為: 3當前 EnumSet 中數(shù)據(jù)為: 2
在JDK1.5 之前,我們定義常量都是: public static fianl.... 。現(xiàn)在好了,有了枚舉,可以把相關的常量分組到一個枚舉類型里,而且枚舉提供了比常量更多的方法。
public enum Color { RED, GREEN, BLANK, YELLOW }
JDK1.6之前的switch語句只支持int,char,enum類型,使用枚舉,能讓我們的代碼可讀性更強。
如果打算自定義自己的方法,那么必須在enum實例序列的最后添加一個分號。而且 Java 要求必須先定義 enum 實例。
下面給出一個toString()方法覆蓋的例子。
public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4); // 成員變量 private String name; private int index; // 構(gòu)造方法 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; // 構(gòu)造方法 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); } }
public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO } }
新聞熱點
疑難解答