JAva 5の新しいプロパティ列挙タイプ

3169 ワード

一、シミュレーション列挙の実現原理の交通灯
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タイプですが、各列挙のメンバーは、定義した列挙タイプのインスタンスです.彼らはpublic finalタイプとしてプリセットされているので、彼らを変更することはできません.彼らもstaticメンバーなので、タイプ名で直接使用することができます.
Enumクラスが継承されている以上、その中の一部のメソッド、例えばname()メソッドを使用して、この列挙定数の名前を返すことができます.EnumクラスはtoStringメソッドを書き換え、列挙定数の名前を返す.その他の方法の使用も簡単で、具体的な使い方はapiドキュメントを参照することができる.
 
三、使用場面
作用:ある事物(対象)は予め規定されたデータのセットを定義し、記入値が合法的で、規定されたデータの範囲内を超えないことを保証する.例えば、性別、ユーザタイプ等のメンバー変数を定義場合、列挙タイプのメンバー変数としてカプセル化することができ、使いやすい.
四、まとめ
列挙タイプは特殊なクラスなので、属性やメソッドを定義することもできます.しかし、構造方法は必ず私有化しなければならない.列挙クラスのメンバーはstaticタイプであるため、列挙クラスは一例として実現できる.