2008年5月23日 星期五

Java Enum

以下為閱讀 www.dzone.com/links/a_short_primer_on_java_enums_part_1.html

www.dzone.com/links/a_short_primer_on_java_enums_part_2.html 的筆記.

只是筆記! 專業勿入! 以下程式碼為簡單範例! 不保證能執行! 但大體上就長這樣! Enum 為 Java 5.0 之後才開始支援!

沒有 Enum 的日子

Java 程式中我們常會要用到常數,通常我們會這樣寫:

public static final int BOY = 0;
public static final int GIRL = 1;

這樣寫的壞處有:

  • 你無法預期使用你程式碼的人輸入奇怪的參數. 你可能預期 setSex(BOY) ,但你無法不讓他輸入 setSex(0) 甚至是 setSex(3) 這種鳥事發生!
  • 用 int 當做常數用,當你修改常數定義時,其他使用此常數的部份不會知道此處的異動!
    int 常數修改不會造成 "使用該 int 常數的類別" 重新 Compile ! (非防禦性的寫法 !?)
/* 當 GIRL 的值從 1 改成 3 時: */

setSex(GIRL); // 這種寫法 ok! 但基本上它不用知道你 GIRL 改成 2 or 3!

setSex(1); // 出包!! 個人稱這種包叫做七龍珠現象! 但我通常沒有龍珠雷達!

Enum

把上述的常數宣告改成 Enum :

public enum Sex
{
  BOY, GIRL
}

修改使用原本 int 常數的介面:

// public void setSex(int inSex){...} // 原本寫法.
public void setSex(Sex inSex){...} // 使用 Enum !
...
setSex(3); // 此寫法已經無效!!
setSex(SEX.BOY); // 使用 Enum ! 
setSex(SEX.GIRL); // 只能傳入 Sex Enum 定義的 BOY 和 GIRL !
  • 若是多個類別需要用到常數,就使用一個獨立的 Pulbic Enum .
  • 若只為一個特定的類別所使用,就用 public inner Enum 寫法,如下:
public class SexMachine
{

  public enum Sex
  {
    BOY, GIRL
  }


  public void setSex(Sex inSex)
  {
    ...
  }
}


更多的 Enum

  • 在 Enum 內加上額外的屬性.
  • 在 Enum 內加上額外的方法.
  • 在 Hibernate 中使用 Enum .
  • 讓 Enum 印出更易閱讀的資訊.
  • 從 顯示值 轉換成 Enum 值 .

請看 www.dzone.com/links/a_short_primer_on_java_enums_part_2.html

0 則回應:

Related Posts Plugin for WordPress, Blogger...