聊聊java中的列舉類
阿新 • • 發佈:2018-11-26
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, 而直接使用“ = = ” 就可以。