java列挙の応用を深く勉強します。


一.列挙と静的定数の違い
列挙について話します。まず考えてみます。これはpublic static final Stringの修飾の定数と何が違いますか?
列挙した二つの長所を挙げます。
1.タイプの安全を保証しました。調整者は任意に1つのintまたはStringなどの値を伝えられません。
2.コードの可読性が非常に高い。
例を挙げます
実際のプログラミングでは、しばしばこのような「データセット」が存在し、その値はプログラムで安定であり、「データセット」の要素は限定的である。例えば春夏秋冬の4つのデータ要素は四季の「データセット」を構成しています。
あなたが書いた方法get(String season)は、入力タイプはStringタイプだけで、Stringタイプは春、夏しかないです。秋です。冬です。
この時。4文字列の定数を書きます。

public class Common {
  public static final String SPRING=" ";
  public static final String SEASON=" ";
  public static final String SUMMER=" ";
  public static final String AUTUMN=" ";
}
getメソッドにgetを入れて、確かに春を入れましたが、この時に隠れていることが分かります。get(Stering season)はSteringタイプです。新しい同僚や知らない同僚は、「春、夏、秋、冬」という言葉を入れるしかないです。この時、コンパイル期間には間違いがないです。運行してから、間違いを見つけました。
上のような隠れた危険を防ぐために、列挙されました。

  public enum Season {
    SPRING(" "),
    SUMMER(" "),
    AUTUMN(" "),
    WINTER(" ");
  .....
}
この時、私達はget方法の参参を改正して、get(Season)に変えます。  season  この時にget(Season.SPRING)を加えると、着信パラメータはこれらしかないと保証できます。
二.列挙を理解する
まず、列挙もクラスです。列挙を書いて理解します。

//            
public enum Season {
  SPRING(1," "),
  SUMMER(2," " ),
  AUTUMN(3," " ),
  WINTER(4," "); //           ,    
  
  /*       
   *public static final Season SPRING = new Season(1, ); 
   *public static final Season SUMMER = new Season(2, ); 
   *public static final Season AUTUMN = new Season(3, ); 
   *public static final Season WINTER = new Season(4, ); 
   *     ,         
   */  
  /*
   * 1.           ,                 
   * 2.   private,      new   
   */
  private Season(int code,String name) {
    this.name = name;
    this.code = code;
  }
  //     
  private String name;
  private int code;
  //         
  public String getName() {
    return this.name;
  }
  public String getCode() {
    return this.name;
  }
  //  code    ,              
  public static Season decode(int code) {
    Season season = null;
    for (Season type : Season.values()) {
      if (type.code==code) {
        season = type;
        break;
      }
    }
    return season;
  }
  //  toString  
  public String toString() {
    return this.name;
  }
}
上の例では、列挙をよく説明しました。普通のクラスとは違いません。ただ別の書き方で属性のあるオブジェクトを作成しました。これもこのように属性のある構造関数を書かなければなりません。これだけです。
ここではついでに列挙します。
1.publicのコンストラクタを持ってはいけません。このようにすれば、顧客コードが一つのenumを新たに作ることができないことを保証できます。 
2. 列挙は他の類を引き継ぐことができなくなりました。それは黙認してjava.lang.Enumを受け継ぎました。 
3. 定数値の住所が唯一で、==直接コントラストができ、性能が向上します。 
4.Enumはまた、values方法を提供しています。この方法は、すべての列挙値を便利に遍歴することができます。 
5.Enumにはもう一つのオリジナルルの方法があります。この方法はエニュメレート・クラスの順序に戻ります。この順序はエニュメレート・ステートメントの順序によって決められます。
三.列挙のよくある使い方
第一種類:switchの運用
まず列挙を作成します。

public enum Common {
  INSERT,
  MODIFY,
  DELETE
}
//          ,              。         。
写実現代において

public class CommonUtils {

  public static void getType(Common common){
    Common c=common;
    switch(c)
    {
    case INSERT:
      System.out.println("      ");
      break;
    case MODIFY:
      System.out.println("      ");
      break;
    case DELETE:
      System.out.println("      ");
      break;
    }  
    
  }
  public static void main(String[] args) {
    getType(Common.DELETE); //    :      
  }
}
第二の用法、key値でvalue値を取得して他の値を取得する。
列挙類

public enum Season {
  SPRING(1," ","     "),
  SUMMER(2," ","     "),
  AUTUMN(3," ","     "),
  WINTER(4," ","     "); 
  
  private Season(int code,String name,String bz) {
    this.code = code;
    this.name = name;
    this.bz=bz;
  }
  private int code;
  private String name;
  private String bz;
  public static Season decode(int code) {
    Season season = null;
    for (Season type : Season.values()) {
      if (type.code==code) {
        season = type;
        break;
      }
    }
    return season;
  }
  public int getCode() {
    return code;
  }
  public String getName() {
    return name;
  }
  public String getBz() {
    return bz;
  }

}
テストクラス

はい、こんなにたくさん書きます。これからもっと深く知る必要があります。皆さんの応援に感謝します。