import java.util.EnumMap; import java.util.EnumSet; public enum Week { MON { public String toLocaleString() { return "星期一"; } }, TUES { public String toLocaleString() { return "星期二"; } }, WEB { public String toLocaleString() { return "星期三"; } }, THUR { public String toLocaleString() { return "星期四"; } }, FRI { public String toLocaleString() { return "星期五"; } }, SAT { public String toLocaleString() { return "星期六"; } }, SUN { public String toLocaleString() { return "星期日"; } }; public abstract String toLocaleString(); public static void main(String[] args) { for (Week w : Week.values()) { System.out.println(w.toLocaleString()); } testEnumSet(); testEnumMap(); testTraversalEnum(); } /* * 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容<BR/> * * 可以使用allOf方法 * * values()方法是编译器插入到enum定义中的static方法,所以, * 当你将enum实例向上转型为父类Enum是,values()就不可访问了。 * 解决办法:在Class中有一个getEnumConstants()方法, * 所以即便Enum接口中没有values()方法,我们仍然可以通过Class对象取得所有的enum实例 */ private static void testEnumSet() { EnumSet<Week> currEnumSet = EnumSet.allOf(Week.class); for (Week aLightSetElement : currEnumSet) { System.out.println("当前EnumSet中数据为:" + aLightSetElement); } ; Week[] weeks = Week.class.getEnumConstants(); } /** * * 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key要是枚举类型 */ private static void testEnumMap() { EnumMap<Week, String> currEnumMap = new EnumMap<Week, String>(Week.class); // 1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型 currEnumMap.put(Week.MON, "星期1"); currEnumMap.put(Week.TUES, "星期2"); currEnumMap.put(Week.WEB, "星期3"); currEnumMap.put(Week.THUR, "星期4"); currEnumMap.put(Week.FRI, "星期5"); currEnumMap.put(Week.SAT, "星期6"); currEnumMap.put(Week.SUN, "星期7"); for (Week aLight : Week.values()) { System.out.println("[key=" + aLight.name() + ",value=" + currEnumMap.get(aLight) + "]"); } } /** * * 演示枚举类型的遍历 */ private static void testTraversalEnum() { Light[] allLight = Light.values(); for (Light aLight : allLight) { System.out.println("当前灯name:" + aLight.name()); System.out.println("当前灯ordinal:" + aLight.ordinal()); System.out.println("当前灯:" + aLight); } } public enum Light { // 利用构造函数传参 RED(1), GREEN(3), YELLOW(2); // 定义私有变量 private int nCode; // 构造函数,枚举类型只能为私有 private Light(int _nCode) { this.nCode = _nCode; } @Override public String toString() { return String.valueOf(this.nCode); } } }
只能够表示出红灯、绿灯和黄灯,但是具体的值没办法表示出来。可以通过构造函数和覆写toString方法来实现。
步骤:
1、为枚举类(Light)增加私有构造方法
2、定义枚举类型的值(通过构造函数传入对应的参数)
3、覆写toString方法,返回从构造函数中传入的参数即可