Java中的Enum使用
Enum是在Java中用來定義枚舉類型的關鍵字。Enum一般用來表示一組相同類型的常量,如性別、日期
、顏色等.
下面是一個最簡單的枚舉。
public enum Color
{
RED,
GREEN,
BLUE
}
實際上在Java中枚舉類型本質上就是一個類,其繼承自java.lang.Enum類。
通過預設提供的GetValues()方法可以擷取所有枚舉對象,其以一個數組的形式返回。
for(Color color : Color.values())
{
System.out.printf("%s: %s%n",color,color.toString());
}
輸出結果為:
RED: RED
GREEN: GREEN
BLUE: BLUE
既然是enum本質上是類,那麼我們當然可以給其加一些方法。注意最後一個枚舉對象要使用“;”結尾,說明枚舉值結束使用。
public enum Color
{
RED("Red Color"),
GREEN("Green Color"),
BLUE("Blue Color");
private final String
color;
private Color(String color) {
this.color = color;
}
public String getColor() {
return
color;
}
}
注意在enum中是不能聲明public的建構函式的,這樣是為了避免直接執行個體化enum對象。
我們可以通過getValues方法調用getColor()方法。
for(Color color : Color.values())
{
System.out.printf("%s: %s%n",color,color.getColor());
}
以下是輸出結果:
RED: Red Color
GREEN: Green Color
BLUE: Blue Color
如果大家還是看不太明白的話,我可以展示一個類來對個對比。
public final class Color extends java.lang.Enum{
public static final Color RED;
public static final Color GREEN;
public static final Color BLUE;
static {};
public java.lang.String getColor();
public static Color[] values();
public static Color valueOf(java.lang.String);
}
這個類的作用完全等同於我們的Color枚舉對象。而每個被枚舉的成員其實就是定義的枚舉類型的一個執行個體,它們都被預設為final。無法改變常數名稱所設定的值,它們也是public和static的成員,這與介面中的常量限制相同。可以通過類名稱直接使用它們。
所以我們大膽的在裡面增加一些其它的方法來實現我們的新特性。
在這裡我增加了一個新的方法isRed()來判斷當前枚舉執行個體是否是紅色的。
public enum Color
{
RED("Red Color"),
GREEN("Green Color"),
BLUE("Blue Color");
private final String
color;
private Color(String color) {
this.color = color;
}
public String getColor() {
return
color;
}
public boolean isRed()
{
return
this.equals(RED);
}
}
可以對其進行一個測試。
Color green = Color.GREEN;
System.out.print(green.isRed());
Color red = Color.RED;
System.out.print(red.isRed());
第一個輸出結果為false,第二個輸出結果為true。
我也可以簡單的講解下c#中的枚舉對象。在c#中聲明枚舉對象的關鍵字是enum。
訪問修辭符 enum
枚舉名:基礎類型
{
枚舉成員
}
基礎類型必須能夠表示該枚舉中定義的所有枚舉數值。枚舉聲明可以顯式地聲明
byte、sbyte、short、ushort、int、uint、long
或 ulong 類型作為對應的基礎類型。沒有顯式地聲明基礎類型的枚舉聲明意味著所對應的基礎類型是
int.
public enum Color
{
RED,
GREEN,
BLUE
}
所以我們可以直接將一個枚舉類型強制轉換成其對應的基礎類型。
Int num = (int)Color.Red;
Num的值為0.
我們也可以反向轉換。
Color color = (Color)num;
甚至我們還可以對枚舉類型進行與或運算。這些就不細說了,有興趣的可以查閱相關資料。