From Gossip@Openhome

Java Gossip: EnumSet

EnumSet的名稱說明了其作用,它是在J2SE 5.0後加入的新類別,可以協助您建立列舉值的集合,它提供了一系列的靜態方法,可以讓您指定不同的集合建立方式,例如:
  • EnumSetDemo.java
package onlyfun.caterpillar;

import java.util.*;

enum FontConstant { Plain, Bold, Italic }

public class EnumSetDemo {
public static void main(String[] args) {
EnumSet<FontConstant> enumSet =
EnumSet.of(FontConstant.Plain, FontConstant.Bold);
showEnumSet(enumSet);
showEnumSet(EnumSet.complementOf(enumSet));
}

public static void showEnumSet(
EnumSet<FontConstant> enumSet) {
Iterator iterator = enumSet.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
}
}

您可以指定列舉值來加入EnumSet中,of()方法會返回一個EnumSet的實例,當中包括您所指定的列舉值,您也可以使complementOf()指定一個EnumSet的互補集,以下是執行的結果:
Plain Bold
Italic 


EnumSet實作了Set介面,所以您可以使用Set介面的所有方法來測試它所包括的列舉值,例如測試一個集合中是否包括 FontConstant.Bold:
if(enumSet.contains(FontConstant.Bold)) {
     ....
}
 
您也可以建立一個空的EnumSet,然後自己逐個加入列舉值,例如:

  • EnumSetDemo.java
package onlyfun.caterpillar;

import java.util.*;

enum FontConstant { Plain, Bold, Italic }

public class EnumSetDemo {
public static void main(String[] args) {
EnumSet<FontConstant> enumSet =
EnumSet.noneOf(FontConstant.class);

enumSet.add(FontConstant.Bold);
enumSet.add(FontConstant.Italic);

showEnumSet(enumSet);
}

public static void showEnumSet(
EnumSet<FontConstant> enumSet) {
Iterator iterator = enumSet.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
}
}

執行結果:
Bold Italic

您也可以由一個容器物件中建立EnumSet:
List<FontConstant> list = new ArrayList<FontConstant>();
list.add(FontConstant.Bold);
list.add(FontConstant.Italic);
showEnumSet(EnumSet.copyOf(list));
 
更多EnumSet相關的方法,您可以參考 EnumSet 線上API文件