1. 程式人生 > >聊聊java中的列舉類

聊聊java中的列舉類

1、列舉類是 java.lang.Enum 類的子類,其中RED、GREEN、YELLOW都是Light預定義好的Light的例項。

在執行期間,我們無法再建立新的Enum的例項

public enum Light {

       // 利用建構函式傳參

       RED (1), GREEN (3), YELLOW (2);

       // 定義私有變數

       private int nCode ;

       // 建構函式,列舉型別只能為私有

       private Light( int _nCode) {

           this . nCode = _nCode;

       }

       @Override

       public String toString() {

           return String.valueOf ( this . nCode );

       }

    }

注意:列舉類的構造方法一定要是private,這樣可以保證不會在類外面定義類的例項)

列舉類定義預設都是public static final;

2、為什麼選擇列舉類而不是靜態常量

    1)靜態常量的方法

在靜態常量的方法中隱藏著一些問題,這些常量是Java中int型別的常量,這意味著該方法可以接受任何int 型別的值,即使它和WeekDay中定義的所有日期都對應不上。因此,您需要檢測上界和下界,在出現無效值的時候,可能還要丟擲一個IllegalArgumentException。

public class WeekDay {

        public static final int MONDAY = 1;

        public static final int TUESDAY = 2;

        public static final int WENSDAY = 3;

        public static final int THURSDAY = 4;

        public static final int FRIDAY = 5;

}

    2)列舉類的方法

public class WeekDay {

         public static final WeekDay MONDAY = new WeekDay(1);

         public static final WeekDay TUESDAY = new WeekDay(2);

         public static final WeekDay WENSDAY = new WeekDay(3);

         public static final WeekDay THURSDAY = new WeekDay(4);

         public static final WeekDay FRIDAY = new WeekDay(5);

         public int getValue(){

                   return value;

         }

         private int value;

         private WeekDay(int i){

                   this.value = i;

         }

}

使用列舉的好處就是程式現在接受的不是int型別的資料了,而是WeekDay的一個預定義好的static final的例項(WeekDay.TUESDAY等 )。由於他們都是單例的,因此可以選擇使用equals或者==。

3、enum常用方法的使用

public static enum Light {
    RED,YELLOW,BLUE
}

public static void main(String args[]) {
    for(Light light:Light.values()) {
        System.out.println(light.toString());
    }
    System.out.println(Light.valueOf("RED"));
}

在比較兩個列舉型別的值時, 永遠不需要呼叫 equals, 而直接使用“ = = ” 就可以。