概述
本文深入讲解JAVA1.5新特性之一的枚举,对其概念,应用做了详尽的描述,目的在于帮助学员更好的理解SCJP认证考试中关于枚举的题目,并且在开发中能够灵活使用枚举。本文包括以下内容:
一.枚举(enum)的概念(枚举是不是类)
二.为什么要有枚举
三.枚举与单例模式
四.枚举与策略模式
一.枚举的概念
关于枚举的概念,我们可以先提一个问题,对于一切都是类一切都是对象的JAVA语言来说,枚举是不是类?
enum除了不能继承之外,可以定义构造器,有正常的方法,甚至是抽象方法,因此基本上可以将enum看做一个常规的类。既然可以把它看作是一个常规的类,我们不妨写一个类模拟枚举。
本文的案例场景:以我们迈胜(mison)的企业理念以及各个岗位的工作职责为例:
- public class Misoner {
- private Misoner() {}
- //讲师
- public static final Misoner TECHNICAL_ADVISER = new Misoner();
- //就业指导
- public static final Misoner EMPLOYMENT_GUIDE = new Misoner();
- //软件外包
- public static final Misoner SOFTWARE_DEVELOPMENT = new Misoner();
- //咨询中心
- public static final Misoner CONSULTING_CENTER = new Misoner();
- }
- public enum MisonerEnum{
- // 讲师,就业指导中心,软件外包中心,咨询中心
- TECHNICAL_ADVISER, EMPLOYMENT_GUIDE, SOFTWARE_DEVELOPMENT, CONSULTING_CENTER;
- }
接下来再提两个问题:
1.枚举的构造器怎么调用?
2.枚举的抽象方法如何实现?
先看第1个问题:
- package complex;
- public class Misoner {
- private Misoner(String position) {
- System.out.println("岗位:" + position);
- }
- public static final Misoner TECHNICAL_ADVISER = new Misoner("技术总监");
- public static final Misoner EMPLOYMENT_GUIDE = new Misoner("就业指导");
- public static final Misoner SOFTWARE_DEVELOPMENT = new Misoner("项目经理");
- public static final Misoner CONSULTING_CENTER = new Misoner("咨询顾问");
- }
- package complex;
- public enum MisonerEnum {
- TECHNICAL_ADVISER("技术总监"), EMPLOYMENT_GUIDE("就业指导"), SOFTWARE_DEVELOPMENT(
- "项目经理"), CONSULTING_CENTER("咨询顾问");
- private MisonerEnum(String position) {
- System.out.println("岗位:" + position);
- }
- }
- package complex;
- public abstract class Misoner {
- private Misoner(String position) {
- System.out.println("岗位:" + position);
- }
- // 定义内部类对象
- public static final Misoner TECHNICAL_ADVISER = new Misoner("技术总监") {
- public void work() {
- System.out.println("讲师提供一流的JAVA技术培训");
- }
- };
- public static final Misoner EMPLOYMENT_GUIDE = new Misoner("就业指导") {
- public void work() {
- System.out.println("就业指导中心帮助学员实现高薪就业");
- }
- };
- public static final Misoner SOFTWARE_DEVELOPMENT = new Misoner("项目经理") {
- public void work() {
- System.out.println("软件外包中心为学员提供商业外包带薪实战");
- }
- };
- public static final Misoner CONSULTING_CENTER = new Misoner("咨询顾问") {
- public void work() {
- System.out.println("咨询中心为学员提供生活学习上的一切服务");
- }
- };
- //定义抽象方法
- public abstract void work();
- }
- package complex;
- public enum MisonerEnum {
- TECHNICAL_ADVISER("技术总监") {
- public void work() {
- System.out.println("讲师提供一流的JAVA技术培训");
- }
- }, EMPLOYMENT_GUIDE("就业指导") {
- public void work() {
- System.out.println("就业指导中心帮助学员实现高薪就业");
- }
- }, SOFTWARE_DEVELOPMENT("项目经理") {
- public void work() {
- System.out.println("软件外包中心为学员提供商业外包带薪实战");
- }
- }, CONSULTING_CENTER("咨询顾问") {
- public void work() {
- System.out.println("咨询中心为学员提供生活学习上的一切服务");
- }
- };
- private MisonerEnum(String position) {
- System.out.println("岗位:" + position);
- }
- public abstract void work();
- }
通过模拟的枚举类以及JDK1.5提供的枚举的比较,相信大家对枚举的概念会了然于心,枚举的难点便是构造器以及抽象方法。