JDK1.5 之 枚举

来源:互联网 发布:cms 文章收费 编辑:程序博客网 时间:2024/06/06 17:39
为什么要有枚举
    问题:在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

在Java中如何更好的使用这些“数据集”呢?
    枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

枚举是一种特殊的类
    枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。既然相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。

    【注意】
    枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

枚举的使用
  •     作为常量使用,可以替代public static final ...,体现面向对象的思想;
  •     可以用在Switch语句中,最新的JDK1.7版本,Switch语句已经支持了String类型,可以替代大量的if...else,效率更高;
  •     既然枚举是类,可以有方法,重写方法,实现接口等;

枚举只有一个成员时,就可以作为一种单例的实现方式。

示例代码:
public interface ColorProperty    {        public void show();    }        public enum Color implements ColorProperty    {        /*         * 实现自定义的抽象方法         */        RED("#FF0000")        {            @Override            void print()            {                System.out.println("print red!");            }        },        GREEN("绿色", "#00FF00")        {            @Override            void print()            {                System.out.println("print green!");            }        },        BLUE("蓝色", "#0000FF")        {            @Override            void print()            {                System.out.println("print blue!");            }        };                private String name;                private String index;                /*         * 构造方法         */        private Color(String name, String index)        {            this.name = name;            this.index = index;        }                /*         * 构造方法         */        private Color(String index)        {            this.index = index;        }                /*         * 重写方法         */        @Override        public String toString()        {            return this.index + "_" + this.name;        }                /*         * 实现接口中的方法         */        @Override        public void show()        {            System.out.println(this.name + ": " + this.index);        }                /*         * 自定义抽象方法         */        abstract void print();            }



原创粉丝点击