自定义枚举类
2015-12-13 22:07
316 查看
前言:说到枚举类,就要说一下单例模式,单例模式是在类本身只创建出一个实例,且外界不能够创建该类的实例。而枚举类与单例类似,要求类只能本身创建有限个数的实例,同样外界不能创建该类实例,可以称之为“多例模式”(名字是我自己取的,没有权威认证)。
1、枚举类的特点。
(1)所有枚举类的公共父类都是Enum。
(2)枚举项必须写在枚举类的最前面,每个枚举项之间用逗号隔开,如果枚举项后边没有其他内容,可以不写分号,否则必须要写。
(3)枚举类中所有的构造器默认且必须是private(和单例模式一样),外部不能够创建该类实例。而且枚举类中可以显式的指明调用哪个构造器。
(4)枚举类可以有抽象方法,但必须在元素列表声明中以内部类形式实现这些方法。此外,枚举类中还可以定义普通的成员变量和方法。
(5)枚举类可以象枚举类型一样,在 switch 语句中使用。
2、仿单例模式自定义枚举类。
3、现在的枚举类以及底层实现方式。
如今定义枚举类,没有上边那么麻烦了,我们只需要这么简单的定义一下就可以实现:
1、枚举类的特点。
(1)所有枚举类的公共父类都是Enum。
(2)枚举项必须写在枚举类的最前面,每个枚举项之间用逗号隔开,如果枚举项后边没有其他内容,可以不写分号,否则必须要写。
(3)枚举类中所有的构造器默认且必须是private(和单例模式一样),外部不能够创建该类实例。而且枚举类中可以显式的指明调用哪个构造器。
(4)枚举类可以有抽象方法,但必须在元素列表声明中以内部类形式实现这些方法。此外,枚举类中还可以定义普通的成员变量和方法。
(5)枚举类可以象枚举类型一样,在 switch 语句中使用。
2、仿单例模式自定义枚举类。
/** * 原始枚举类 * @author 胡根得 */ public class Year{ //定义枚举项,就是四个实例 public static final Year spring = new Year("spring"); public static final Year summer = new Year("summer"); public static final Year autumn = new Year("autumn"); public static final Year winter = new Year("winter"); private String name; //私有化构造方法,不允许外界创建该类对象 private Year(String name) { this.name = name; } //通过getName方法可以得到枚举项名称 public String getName() { return name; } }这就是一个原始的枚举类了。接下来实现一个有抽象方法的枚举类:
/** * 带抽象方法的枚举类 * @author 胡根得 */ public abstract class Year { //内部类的形式定义枚举项 public static final Year spring = new Year("spring") { public void show() { System.out.println("我是春天"); } }; public static final Year summer = new Year("summer") { public void show() { System.out.println("我是夏天"); } }; public static final Year autumn = new Year("autumn") { public void show() { System.out.println("我是秋天"); } }; public static final Year winter = new Year("winter") { public void show() { System.out.println("我是冬天"); } }; private String name; private Year(String name) { this.name = name; } public String getName() { return name; } public abstract void show(); }
3、现在的枚举类以及底层实现方式。
如今定义枚举类,没有上边那么麻烦了,我们只需要这么简单的定义一下就可以实现:
<span style="font-size:14px;"> public enum Year{ spring,summer,autumn,winter; } </span>小结:虽然如今定义枚举类很方便,但是方便的背后也隐藏了一些细节,那就是它的代码底层也是按照原始的枚举类走的,值得注意的是,不管你在枚举类的构造器前加不加private修饰,底层都是默认加上的,就像接口中的方法默认加上 abstract 修饰一样。
相关文章推荐
- 有漏洞无作为才可怕、可耻!
- 爬虫(heritrix框架)
- 【SpringMVC架构】SpringMVC介绍(一)
- job_queue_processes参数讲解
- uva_10929
- animated-rotate的用法
- 高德地图返回地址详细信息
- 深入分析JavaWeb Item17 -- JavaBean组件
- 学习绝对布局autolayout,重写界面
- 转,handler,message,looper
- nginx pool初探
- Objective-C内存管理第七弹:ARC中@property的使用
- online_judge_1087
- sed
- leetcode 004 Median of Two Sorted Arrays(java)
- OLAP、OLTP的介绍和比较
- ubuntu12.04搭建guacamole
- 大小端(big/little endian)
- 【Explain Plan】查看SQL的执行计划
- JSP入门实战