EnumSet 類提供了 Java.util.Set 接口的實現,該接口保存了某種枚舉類型的值的集 合.EnumSet的作用類似於特性的集合,或者類似於某個枚舉類型的所有元素的值的子 集.EnumSet 類擁有一系列的靜態方法,可以用這些方法從枚舉類型中獲取單個元素或某 些元素, 下面的程序例子顯示如何這些靜態方法:
清單 12:.EnumSet 例子
public class TestEnumSet {
public enum ColorFeature {
RED,BLUE, GREEN, YELLOW,BLACK
} ;
public static void main(String[] args) {
EnumSet allFeatures = EnumSet.allOf(ColorFeature.class);
EnumSet warmColorFeatures = EnumSet.of(ColorFeature.RED,
ColorFeature.YELLOW);
EnumSet non_warmColorFeatures = EnumSet.complementOf (warmColorFeatures);
EnumSet notBlack = EnumSet.range(ColorFeature.RED, ColorFeature.YELLOW);
for (ColorFeature cf : ColorFeature.values()){
if (warmColorFeatures.contains(cf)) {
System.out.println("warmColor "+cf.name());
}
if (non_warmColorFeatures.contains(cf)) {
System.out.println("non_WarmColor "+cf.name());
}
}
}
}
我們在Eclipse3.1環境中運行上面的程序,結果如下圖:
圖8: EnumSet 樣例運行結果
1.3.4 枚舉類型的函數定義
在介紹創建枚舉類型中曾提到枚舉類型都是java.lang.Enum的子類. 也就是說, 枚舉 類型都是可編譯的Java 的類,那麼就可以在枚舉類型裡添加構造函數和其它函數,如清 單13裡的getDescription()
清單 13:
public enum ColorFeature {
RED(0),
BLUE(0),
GREEN(300),
YELLOW(0),
BLACK(0);
/** The degree for each kind of color*/
private int degree;
ColorFeatures(int degree) {
this.degree = degree;
}
public int getDegree( ) {
return degree;
}
public String getDescription( ) {
switch(this) {
case RED: return "the color is red";
case BLUE: return "the color is blue";
case GREEN: return "the color is green";
case BLACK: return "the color is black";
case YELLOW: return "the color is yellow"
default: return "Unknown Color";
}
}}
枚舉類型的函數定義的應用是很有用的, 例如可以讓多個枚舉類型實現同一個 interface 來達到程序設計的模式化. 例如一個定義了getDescription ()接口的 interface,讓有同樣需求的不同枚舉類型來實現它.上面的colorFeature 可以實現它, 另 一個FontFeature也可以實現它.