java新特性—列舉
列舉
限制一個類的物件產生範圍。
舉例:
定義一個Colour類,顏色只能取紅、綠、藍。
可以使用enum定義一種新的類,稱為
列舉型別
package cn.enum.RobertChao;
public enum Color{
RED,GREEN,BIUE;
}
1、可以通過“列舉.內容”的形式進行取值操作。
【列舉類的名字.類中設定得內容的名字】
2、輸出列舉中的全部內容,可以使用foreach完成。
foreach 與 for 的區別。
for迴圈,通過下標,對迴圈中的程式碼反覆執行。可以通過index取得元素。
foreach,從頭到尾遍歷集合中的物件。foreach使用的時候,會鎖定集合的物件,期間不能進行修改。
To Choice foreach or for.
foreach相對於for迴圈,程式碼減少了,foreach依賴IEnumerable。在執行的時候效率低於for迴圈。
在處理不確定迴圈次數的迴圈,或者迴圈次數需要計算的情況下。使用foreach比較方便。
在複雜的迴圈設計時,還是應該使用for迴圈更加的靈活。
利用foreach把列舉型別中的內容全部取出。
package cn.enum.RobertChao;
public class ForeachEnum{
public static void main(String[] args){
for(Color c:Color.values()){
System.out.println(c);
}
}
}
3、Enum類 和 enum關鍵字 。
使用enum關鍵字定義的列舉類,就相當是一個子類,父類是Enum類。
Enum類中定義了下面幾個方法:
方法名稱 | 描述 |
---|---|
public Enum(String name;int ordinal) | 只能被其子類訪問,此構造方法為自動呼叫 |
public final String name() | 列舉的名字 |
public final int ordinal() | 列舉的序號 |
上述構造方法完全與name和ordinal有關
所以這個類的構造方法,在enum每次定義列舉型別的時候,實際上都會自動呼叫構造
4、類集對列舉的支援(EnumSet、EnumMap類)。
① EnumMap是Map介面的子類,可以存放一對內容。
`EnumMap也是可以存放一對內容的。`
舉例:
EnumMap<Color,String> map
= new EnumMap<Color,String>(Color.class);
map.put(Color.RED,"紅色");
System.out.println(map.get(Color.RED));
② EnumSet是Set介面的子類。
EnumSet.allof()、EnumSet.noneof()。
EnumSet.allof();表示將列舉的全部內容設定到集合之中。
EnumSet.noneof();表示Set集合中只能是列舉內容,但不包含列舉中的具體內容。
舉例:
EnumSet<Color> set = new EnumSet.allof(Color.class);
for(Color x : set){
System.out.println(x);
}
讓列舉實現介面
在列舉操作中,一個列舉類是允許實現多個介面的。
但是
要求此時列舉中的每個物件都必須單獨各自覆寫介面中的抽象方法。
舉例:
package cn.com.RebortChao;
interface Info{
public String getColor();
}
poublic enum Color implements Info{
RED{
public String getColor(){
return "紅色";
}
},
GREEN{
public String getColor(){
return "綠色";
}
},
BLUE{
public String getColor(){
return "藍色";
}
};
}
測試一下上述列舉類對介面的引用。
package cn.com.RebortChao;
public class Test{
public static void main(String[] args){
for(Color c : Color.values()){
System.out.println(c.getColor());
}
}
}
在列舉中實現抽象方法
在列舉中定義抽象方法後,列舉中的每個物件都必須分別實現此抽象方法。
package cn.com.RebortChao;
poublic enum Color{
RED{
public String getColor(){
return "紅色";
}
},
GREEN{
public String getColor(){
return "綠色";
}
},
BLUE{
public String getColor(){
return "藍色";
}
};
public abstart String getColor();
}
和繼承介面有些大同小異。