首页 > 编程 > Java > 正文

Java Notes:枚举 (Enumeration)的意义和使用

2019-11-08 01:31:31
字体:
来源:转载
供稿:网友

用枚举的意义在于什么?确保调用方法的时候,如果方法的参数只是某些常数,编译器仅仅进行普通的类型检查是不够的。需要让编译器确定这些常数是不是可以接受的范围内的。

利用在博文:http://blog.csdn.net/firehotest/article/details/56008900中曾提到,Font的初始化方式如下:

java.awt.Font bigFont = new Font(Font.SERIF, Font.BOLD, 20);JLabelObject,setFont(bigFont);观察Font的API说明发现,Font.SERIF、Font.BOLD其实都是一些常数而已。而上述的构造函数的参数只有在某些值内才有意义,但如果用户记错了顺序或者手工输入了一些范围外的int值,编译也是会通过的。需要怎么避免这种情况呢?

这时候就要用到枚举来代替常量了。如果输入的不是对应的枚举类型,那么编译器在编译的时候就会报错。因为枚举从编译后的字节码上看,本质就是一种特殊的类。这个类是final static的。

枚举类型默认是每个变量变量作为枚举类型的数据成员。所以,直接调用toString方法的话返回的是当前变量名。如果,想为当前枚举类型赋上其它的意义值可以这么做:

public class EnumTest2 {    /**     * PRivate nested enumeration of months.     * @author Jeff Eppinger & Terry Lee     */    private enum Month {        JANUARY(1), FEBRUARY(2), MARCH(3), APRIL(4), MAY(5), JUNE(6), JULY(7), AUGUST(8), SEPTEMBER(9),         OCTOBER(10), NOVEMBER(11), DECEMBER(12);        private int number;        private Month(int n) {            number = n;        }        @Override        public String toString() {            return String.valueOf(number);        }    }    /**     * Private nested enumeration of days of the week.     */    private enum DayOfWeek {        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;        @Override        public String toString() {            switch (this) {            case SUNDAY:            case SATURDAY:                return "Weekend :-)";            case FRIDAY:                return "TGIF!!!";            default:                return "Weekday :-(";            }        }    }    /**     * Main method of test program.     * @param args command line arguments     */    public static void main(String[] args) {        printDate(Month.FEBRUARY, DayOfWeek.THURSDAY);        System.out.println("------");        for (DayOfWeek dow : DayOfWeek.values()) {            System.out.println(dow);        }    }    /**     * Sample method to demo compile-time checking of parameters.     * @param month month value     * @param dow day of the week value     */    private static void printDate(Month month, DayOfWeek dow) {        System.out.println(month + " " + dow);    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表