大可制作:QQ群:31564239(asp|jsp|php|mysql)

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文件