Java 枚举简介

发布时间:2024年01月24日

什么是枚举?(熟悉)

enum(枚举) 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,通过关键字enum来定义枚举类。枚举的本质是java.lang.Enum 的子类。枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类。枚举的提出是为了将常量组织起来,进行统一管理。枚举的典型应用场景为:错误码、状态机等。

枚举定义形式如下:

enum Color { RED, GREEN, BLUE; }
//注:如果枚举中没有定义方法,也可以在最后一个实例后面加逗号、分号或什么都不加。

枚举使用时的注意事项(熟悉)

  • 在enum中,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。因此,如果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。
  • Java 不允许使用 = 为枚举常量赋值
  • enum 可以像一般类一样实现接口,但enum 不可以继承另外一个类(已经默认继承Enum),当然,也不能继承另一个 enum 。

switch 状态机的使用(掌握)

JDK7以后,switch已经支持 int、char、String、enum 类型的参数。我们可以使用switch语句来写状态机。代码如下:

Week value = valueOf("MONDAY");
//switch 状态机的使用
switch (value) {
    case MONDAY:
        System.out.println("星期一");
        break;
    case TUESDAY:
        System.out.println("星期二");
        break;
    case WEDNESDAY:
        System.out.println("星期三");
        break;
    case THURSDAY:
        System.out.println("星期四");
        break;
    case FRIDAY:
        System.out.println("星期五");
        break;
    case SATURDAY:
        System.out.println("星期六");
        break;
    case SUNDAY:
        System.out.println("星期天");
        break;
    default:
        break;
}

枚举的策略模式(熟悉)

特定的常量类型与主体中的方法或行为有关时,即当数据与行为之间有关联时,可以考虑使用枚举来实现策略模式。代码如下:

package com.gump.enums;

public enum Week {
    //枚举实例
    MONDAY(1,WeekType.WEEKDAY),
    TUESDAY(2,WeekType.WEEKDAY),
    WEDNESDAY(3,WeekType.WEEKDAY),
    THURSDAY(4,WeekType.WEEKDAY),
    FRIDAY(5,WeekType.WEEKDAY),
    SATURDAY(6,WeekType.WEEKEND),
    SUNDAY(7,WeekType.WEEKEND);

    //成员变量
    private int id;
    private WeekType weekType;

    /**
     * 构造方法
     */
    Week(int id, WeekType weekType) {
        this.id = id;
        this.weekType = weekType;
    }

    /**
     * 普通方法
     */
    public void whatTodo(){
        weekType.todo();
    }

    /**
     * 静态方法
     */
    public static void deal(){
        System.out.println("静态方法");
    }

    //策略枚举
    private enum WeekType{
        WEEKDAY("工作日") {
            @Override
            public void todo() {
                System.out.println(WEEKDAY.memo + "搬砖");
            }
        },
        WEEKEND("休息日") {
            @Override
            public void todo() {
                System.out.println(WEEKEND.memo + "带娃");
            }
        };

        private String memo;

        WeekType(String memo) {
            this.memo = memo;
        }

        /**
         * 抽象方法
         */
        public abstract void todo();
    }

}

其他(了解)

枚举的使用,其实就是归纳了同类型的常量,更易于使用及统一管理。

有兴趣的可以进一步了解枚举相关的其他知识:

  • Enum 中的相关API。
  • EnumSet、EnumMap 的使用。
  • 枚举类是为什么是线程安全的。
文章来源:https://blog.csdn.net/glb168/article/details/135814130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。