ITEEDU

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 enumSet =
		EnumSet.of(FontConstant.Plain, FontConstant.Bold);
		showEnumSet(enumSet);
		showEnumSet(EnumSet.complementOf(enumSet));
	}
	public static void showEnumSet(
	EnumSet 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 enumSet =
		EnumSet.noneOf(FontConstant.class);
		enumSet.add(FontConstant.Bold);
		enumSet.add(FontConstant.Italic);
		showEnumSet(enumSet);
	}
	public static void showEnumSet(
	EnumSet enumSet) {
		Iterator iterator = enumSet.iterator();
		while(iterator.hasNext()) {
			System.out.print(iterator.next() + " ");
		}
		System.out.println();
	}
}

执行结果:

Bold Italic

您也可以由一个容器对象中建立EnumSet:

List list = new ArrayList();
list.add(FontConstant.Bold);
list.add(FontConstant.Italic);

showEnumSet(EnumSet.copyOf(list));

更多EnumSet相关的方法,您可以参考 EnumSet 在线API文件。