javaの列挙

1918 ワード

列挙類概要:
Java 5は、エムキー(class、interfaceキーワードと同じ位置)を追加し、エニュメレーションクラスを定義します。エニュメレート・クラスも特殊なクラスですので、クラスと同じ変数と方法を持っています。また、自分のコンストラクタを定義することもできます。
 
列挙類入門:
列挙クラスの定義:
package com.alibaba.oop;

//        ,
public enum EnumTest {
	
	//      4     
	SPRING,SUMMER,FALL,WINTER;

}
  
エニュメレート・クラスの使用:
public class TestEnum{
	
	public void judge(EnumTest e) {
		
		//switch             
		switch(e) {
			case SPRING:
				System.out.println("    ");
				break;
			case SUMMER:
				System.out.println("    ");
				break;
			case FALL:
				System.out.println("    ");
				break;
			case WINTER:
				System.out.println("    ");
				break;
		}
	}
	
	public static void main(String[] args) {
		
		//        value  ,           
		for(EnumTest e:EnumTest.values()) {
			System.out.println(e);
		}
		
		//        ,   EnumClass.variable   
		new TestEnum().judge(EnumTest.SPRING);
		
		
	}

}
  
実行結果:
SPRING
SUMMER
FALL
WINTER
    
  
列挙類と普通類の違い:
1、エニュメレート・クラスは一つまたは複数のインターフェースを実現し、エンム定義のエニュメレーション類を使用して、デフォルトではjava.lang Eum類を継承しています。Object類をデフォルトで継承するのではなく、エニュメレート・クラスは他の親類を明示的に継承することができません。このうちjava.lang Eum類はjava.lang Serialzableとjava.lang.Comprableの二つのインターフェースを実現しました。
2、enum定義、非抽象的なエニュメレート・カテゴリーを使用してデフォルトではfinal修飾が使用されますので、エニュメレーション類は子供を派遣することができません。
3、列挙類のコンストラクタはprvateアクセス制御子しか使えません。コンストラクタのアクセス制御子を省略したら、デフォルトでprvate修飾を使用します。アクセス制御子を強制的に指定すると、prvate修飾子しか指定できません。
4、エニュメレート・クラスのすべてのインスタンスは、エニュメレート・クラスの最初の行に明示的にリストされなければならない。そうでなければ、このエニュメレート・クラスは永遠にインスタンスを生成できない。これらの例を列挙する時、システムは自動的にpublic static finalの修飾を添加して、プログラマの明示的な添加を必要としません。