Java枚举Enum

Java枚举Enum概述

Java中的枚举(Enum)是一种特殊的类,用于定义一组固定的常量值。枚举提供了一种类型安全的方式来表示一组固定的值,在Java编程中广泛使用。以下是Java枚举的详细介绍:
枚举的基本定义
关键字:使用enum关键字来定义枚举类型。
格式:enum EnumName { Constant1, Constant2, … },其中EnumName是枚举类型的名称,Constant1、Constant2等是枚举类型的常量。
实例:每个枚举常量都是枚举类型的一个实例,它们由JVM自动创建,并在需要时提供给代码。因此,你可以直接通过枚举类型和常量名称来引用它们,比如Color.RED。

枚举的特性
类型安全:枚举类型提供了一种编译时类型检查,确保变量只能被赋予枚举中定义的值。
常量集合:枚举定义了一组命名的常量,这些常量是该枚举类型的实例。
单例:每个枚举常量都是唯一的,不能创建额外的实例。枚举在Java中是隐式静态final的,意味着它们在编译时就被初始化,并且在运行时被视为不可变对象。
命名空间:枚举提供了一个命名空间,可以避免常量名冲突。
实现接口:枚举可以实现接口,这使得它们可以作为接口类型的对象。
继承:枚举默认继承自java.lang.Enum类,但它们不能继承其他类(由于Java的单继承机制)。
方法和字段:枚举可以包含字段和方法,这些可以是静态的也可以是非静态的。枚举的构造器必须是私有的或包级私有的,以防止外部创建枚举实例。
枚举的使用场景
替代传统的常量定义方式,使代码更加清晰、易读和易维护。
表示一组有限的状态或选项,如星期、月份、颜色等。
在switch语句中使用,提供更安全和可读的代码。
作为单例模式的实现方式,因为枚举实例在类加载时就被初始化,并且不允许外界实例化,所以它们是线程安全的。
示例代码

public enum Color {  
    RED, GREEN, BLUE;  
  
    // 枚举可以包含方法  
    public static void printColors() {  
        for (Color color : Color.values()) {  
            System.out.println(color);  
        }  
    }  
  
    // 枚举可以包含字段和方法  
    public enum Direction {  
        NORTH("北"), SOUTH("南"), EAST("东"), WEST("西");  
  
        private final String description;  
  
        Direction(String description) {  
            this.description = description;  
        }  
  
        public String getDescription() {  
            return description;  
        }  
    }  
  
    // 枚举实现接口  
    interface Printable {  
        void print();  
    }  
  
    enum Weekday implements Printable {  
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;  
  
        @Override  
        public void print() {  
            System.out.println("Today is " + this.name());  
        }  
    }  
}

Java枚举是一种强类型的数据类型,它提供了一种更加优雅、清晰和类型安全的方式来表示常量、状态码等。枚举类型可以定义常量、方法、构造器和实现接口,这使得枚举类型非常灵活和功能强大。在Java编程中,合理使用枚举可以大大提高代码的可读性和可维护性。

Java枚举的常见用法

Java枚举(Enum)是一种特殊的类,用于表示一组常量。枚举的使用不仅提高了代码的可读性和可维护性,还提供了类型安全。以下是一些Java枚举的常见用法:

  1. 定义基本枚举
    最直接的用法就是定义一组常量。
public enum Color {
    RED, GREEN, BLUE;
}
  1. 枚举与switch语句
    枚举常与switch语句一起使用,用于根据不同枚举值执行不同操作。
public void printColorInfo(Color color) {
    switch (color) {
        case RED:
            System.out.println("Red color");
            break;
        case GREEN:
            System.out.println("Green color");
            break;
        case BLUE:
            System.out.println("Blue color");
            break;
    }
}
  1. 枚举构造方法
    枚举可以有构造方法,但构造方法必须是私有的,防止外部创建枚举实例。
    public enum Season {
    SPRING("Spring"), SUMMER("Summer"), AUTUMN("Autumn"), WINTER("Winter");

    private final String description;

    Season(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}
  1. 枚举方法
    枚举可以定义自己的方法,包括抽象方法(此时枚举需要实现该方法)。
public enum Operation {
    PLUS("+") {
        public double apply(double x, double y) { return x + y; }
    },
    MINUS("-") {
        public double apply(double x, double y) { return x - y; }
    };

    private final String symbol;

    Operation(String symbol) {
        this.symbol = symbol;
    }

    public abstract double apply(double x, double y);

    public String getSymbol() {
        return symbol;
    }
}
  1. 枚举实现接口
    枚举可以实现一个或多个接口。
public interface Behavior {
    void show();
}

public enum Color implements Behavior {
    RED {
        public void show() { System.out.println("Red"); }
    },
    GREEN {
        public void show() { System.out.println("Green"); }
    },
    BLUE {
        public void show() { System.out.println("Blue"); }
    };

    @Override
    public void show() {
        // 默认实现,但通常不需要,因为枚举常量会实现该方法
    }
}
  1. 枚举集合
    枚举是final的,且其枚举常量隐式地声明为public static final。Java提供了EnumSet和EnumMap两个类来方便地对枚举类型进行操作。
EnumSet<Color> colors = EnumSet.of(Color.RED, Color.GREEN);
EnumMap<Color, String> colorMap = new EnumMap<>(Color.class);
colorMap.put(Color.RED, "Red");
  1. 枚举的序列化
    枚举类型是自动支持序列化的,无需实现Serializable接口。
    枚举的这些用法使得在Java中处理一组固定常量变得更加方便和灵活。
/**
 * @author 
 */
public enum DialogMessageTypeEnum {

    /**
     * 
     */
    REALTIME(0, "实时消息"),
    WHOLE(1, "整句消息"),
    INTENT(2, "意图信息"),
    NODE(3, "流程消息"),
    PORTRAIT(4, "画像信息"),
    ENTRY(5, "实体消息"),
    LIBRARY(6, "话术库消息"),
    QUALITY_INSPECTION(7, "命中信息"),
    WORDS_REMIND(101, "话术字典"),
    ;

    DialogMessageTypeEnum(Integer type, String description) {
        this.type = type;
        this.description = description;
    }

    private final Integer type;
    private final String description;

    public Integer getType() {
        return type;
    }

    public String getDescription() {
        return description;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值