java5新特性枚舉類型

一、模擬枚舉的實現原理之交通燈

     1、定義一個抽象的類TrafficLamp.java

public abstract class TrafficLamp {
	private TrafficLamp(){};
               //定義一個讓子類實現去的抽象方法
	public abstract TrafficLamp nextLamp();
	/*紅燈,使用匿名類,消除了if語句**/
	public final static TrafficLamp RED = new TrafficLamp(){
		@Override
		public TrafficLamp nextLamp() {
			return GREEN;
		}
	};
	/*綠燈**/
	public final static TrafficLamp GREEN = new TrafficLamp(){
		@Override
		public TrafficLamp nextLamp() {
			return YELLOW;
		}
	};
	/*黃燈**/
	public final static TrafficLamp YELLOW = new TrafficLamp(){
		@Override
		public TrafficLamp nextLamp() {
			return RED;
		}
	};
                /**爲了方便打印,重寫toString方法*/
	@Override
	public String toString() {
		String retVal;
		if(this==RED){
			retVal= "RED";
		}else if(this==GREEN){
			retVal = "GREEN";
		}else{
			retVal="YELLOW";
		}
		return retVal;
	};
}

 

    2、測試類TrafficLampTest.java

public class TrafficLampTest {
	public static void main(String[] args) {
		TrafficLamp lamp1 = TrafficLamp.GREEN;
		TrafficLamp lamp2 = TrafficLamp.RED;
		TrafficLamp lamp3 = TrafficLamp.YELLOW;
		System.out.println(lamp1.nextLamp());
		System.out.println(lamp2.nextLamp());
		System.out.println(lamp3.nextLamp());
	}

}

 

 

二、枚舉的基本使用之交通燈

   1、定義一個抽象的類TrafficLamp.java

public enum TrafficLamp {
	RED(30){
		public TrafficLamp nextLamp(){return GREEN;}
		},
	GREEN(45){
		public TrafficLamp nextLamp(){return YELLOW;}
		},
	YELLOW(45){
		public TrafficLamp nextLamp(){return RED;}
		};
	public abstract TrafficLamp nextLamp();//抽象方法讓子類去實現
	private TrafficLamp() {}
	private int time;//燈亮的時間
	//只供內部調用構造方法
	private TrafficLamp(int time){this.time=time;}
	public int getTime() {
		return time;
	}
}

   2、測試類TrafficLampTest.java

public class TrafficLampTest {

	public static void main(String[] args) {
		TrafficLamp lamp1 = TrafficLamp.GREEN;
		System.out.println(lamp1);
		System.out.println(lamp1.name());
		System.out.println(lamp1.toString());
		System.out.println(lamp1.getTime());
		System.out.println(lamp1.nextLamp());
	}

}

 3、知識點剖析

    當使用"enum"義 枚舉類型時,實質上定義出來的類型繼承自java.lang.Enum 類型,而每個枚舉的成員其實就是您定義的枚舉類型的一個實例(Instance).他們都被預設爲public final類型,所以您無法改變他們,他們也是 static 成員,所以您可以通過類型名稱直接使用他們.

    既然繼承了Enum類,所以就可以使用它裏面的部分方法,如:name()方法 ,返回此枚舉常量的名稱.Enum類重寫了toString方法,返回的也是枚舉常量的名稱.其他方法的使用也很簡單,具體用法可參考api文檔.

 

三、使用場合

 作用:某一種事物(對象)提前定義好一組規定的數據,保證填寫值合法,不超出規定的數據範圍之內.如:定義性別,用戶類型等成員變量時,可以封裝成一個枚舉類型的成員變量,方便使用.

四、總結

 枚舉類型是一種特殊的類,所以它裏面也可以定義屬性、方法。但構造方法一定要私有化!因爲枚舉類裏面的成員都是static類型的,所以枚舉類可以作爲一種單例的實現方式.

發佈了15 篇原創文章 · 獲贊 3 · 訪問量 2101
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章