列挙タイプ(enum)の紹介


列挙タイプ
 1、概説、JDK 1.5は列挙タイプを追加し、enumを使用してegを定義することができる.
           public enum Gender{
              MALE,FEMALE;
           }
  各列挙要素は、列挙タイプのインスタンスであり、使用および遍歴されます.
           Gender gender = Gender.MALE;    //      
           for(Gender s : Gender.values()) {//  
                 System.out.println(s);  
           }
 2、Enum類とenumキーワードの違い
           1.enumキーを使用して定義された列挙タイプは、java.lang.Enumクラスを継承するクラスを定義することに相当します.
           2.各列挙値は、public static finalとしてプリセットされた列挙タイプのインスタンスです.
        Enumクラスには保護された構造方法が1つしかありません
              protectd Enum(String name,int ordinal)
              ordinal:列挙要素の番号
           実際には、各列挙要素について宣言すると、この構築方法が自動的に呼び出され、すべての番号が自動番号付けされます(番号は
0開始);
           valueOf()メソッドを使用すると、列挙クラスで指定したオブジェクトを見つけることができます.
           public enum Color{
              RED,BLUE;
           }
、列挙タイプオブジェクトを取得する2つの方法:
           1つ目の方法:
       String s = "RED";
           Color red = Color.valueOf(s);
           2つ目の方法:
       Color red = Color.RED;
           1つ目の方法は、文字列の値によって取得されます.
オブジェクトは、文字列の値を変更する限り、取得するオブジェクトを任意に変更する.
           2つ目の方法はデッドコードを書くことであり,どのように実行しても列挙クラスのREDオブジェクトを手に入れることであり,永遠にそうである.
4、列挙タイプの属性と方法
           列挙タイプには、属性とメソッドがあります.
           ルールは次のとおりです.
          
属性とメソッドは、要素リスト宣言の後に定義する必要があります.        
public enum Color{
              RED,BLUE;
              private String name;
              public String getName(){
              return this.name;
              }
           }
、列挙タイプでの構築方法の定義
            1.列挙の構築方法は、要素リストの後にのみ定義できます.
            2.列挙タイプの構造方法は
privateの、デフォルトを書かないのもprivateです
            3.エレメントにパラメトリックメソッドを呼び出す必要がある場合は、エレメントの後に「(パラメータ)」を付けます.
    説明:Colorタイプは3つの固定オブジェクトのみで、それぞれRED GREEN BLUEであり、この3つのオブジェクトは作成時にそれぞれパラメトリックコンストラクタとパラメトリックコンストラクタを呼び出した.
              eg: 
      public enum Color {
             RED("  "),GREEN("  "),BLUE;
             private String name;
             public String getName(){
                return this.name;
                 }
             //       
             Color(String name){
                this.name = name;
             }
             //     
             private Color(){
             }
              }
 main:
            //Colorの3つの固定オブジェクトのうちの1つを取得
             Color c = Color.RED;
            //REDオブジェクトのname属性の値を取得
            //この値を印刷すると「赤」になります
            //REDというオブジェクトなので作成したとき
            //パラメータのコンストラクタを介して属性nameに渡される
            //列挙タイプで要素リストを宣言するのは、実は
            //この列挙タイプの固定オブジェクトを作成するには
             String name = c.getName();
       列挙はエンムに暗黙的に継承されるため、他のクラスを継承することはできません.
6、列挙実現インタフェース
           列挙はインタフェースを実現することができ、以下の2つの方法がある.
          1.通常のclassクラスと同様に、列挙クラスでインタフェースを実装する
          2.列挙においてインタフェース内の抽象メソッドを単独で実装するか、または各列挙要素オブジェクトにおいてこのインタフェース内の抽象メソッドをそれぞれ実装する 
        public interface Sofa{
            void sit();
          }          
        インタフェースを実装する第1の方法          
    public enum Color implements Sofa{
             RED("  "),GREEN("  "),BLUE;
             private String name;
             public String getName(){
                return this.name;
                 }
             //       
             Color(String name){
                this.name = name;
             }
             //     
             private Color(){
             }
             //       ,                   
             public void sit(){
                //....
             }
        }
         インタフェースを実装する第2の方法
           
  public enum Color implements Sofa{
             //                                                  sit  
             RED("  "){
                public void sit(){
                    //....
                    }
             },
             GREEN("  "){
                public void sit(){
                    //....
                    }
             },            
             BLUE{
                public void sit(){
                    //....
                    }
             };
             private String name;
             public String getName(){
                return this.name;
                 }
             //       
             Color(String name){
                this.name = name;
             }
             //     
             private Color(){
             }
              }
、列挙における抽象メソッドの定義
          1つの列挙では、複数の抽象メソッドを定義できますが、列挙の各要素は、次のコードのように、これらの抽象メソッドをそれぞれ実装する必要があります.        
public enum Color {
             RED{
            public String getInfo() {//RED       
               return "  ";
            }
             },
             GREEN{
            public String getInfo() {//GREEN       
               return "  ";
            }
             },
             BLUE{
            public String getInfo() {//BLUE       
               return "  ";
            }
             };
             public abstract String getInfo();//      
          }

以上が列挙の紹介である