Java 枚举

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方法,返回从构造函数中传入的参数即可

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。