java 枚举类

枚举类的构造函数可以带多个参数,并且每个枚举值可以通过这些参数进行初始化。通过这种方式,枚举值不仅可以携带多个属性,还能更灵活地封装和管理这些属性。

枚举类的定义

public enum Day {
    //枚举值定义
    MONDAY("Start of the week", 8, false),
    TUESDAY("Second day of the week", 8, false),
    WEDNESDAY("Midweek", 8, false),
    THURSDAY("Almost the weekend", 8, false),
    FRIDAY("End of the work week", 6, false),
    SATURDAY("Weekend", 0, true),
    SUNDAY("Day of rest", 0, true);

    private String description;
    private int workHours;
    private boolean isWeekend;

    // 构造函数,默认是 private(不需要显式声明)    
    Day(String description, int workHours, boolean isWeekend) {
        this.description = description;
        this.workHours = workHours;
        this.isWeekend = isWeekend;
    }

    // 获取描述
    public String getDescription() {
        return description;
    }

    // 获取工作小时
    public int getWorkHours() {
        return workHours;
    }

    // 是否是周末
    public boolean isWeekend() {
        return isWeekend;
    }
}

枚举值

枚举类中的每个枚举值本质上是 static 类型的常量。具体来说,Java 枚举中的每个枚举值(如 MONDAY, TUESDAY 等)都是 public static final 的实例,这意味着它们是静态的、不可改变的,并且可以通过类名直接访问。虽然在编写代码时你并没有显式声明 MONDAYstatic final,但编译器会自动处理。

枚举值的调用可以使用类名.枚举值的方式实现

        // 直接访问静态的枚举值
        Day day = Day.MONDAY;

构造函数

当枚举包含多个属性时,如 descriptionworkHoursisWeekend,你需要一个构造函数来为这些属性赋值。虽然枚举常量是固定的,但其内部的属性可以是不同的,因此需要通过构造函数来进行初始化。如果没有构造函数,你将无法为每个枚举值传递参数,也无法赋予它们不同的属性。例如,没有构造函数,你将不能为 MONDAYSUNDAY 分别设置不同的描述、工作小时或周末状态。

  • 枚举的构造器默认是 private,甚至你不显式声明为 private 时,Java 也会将其视为 private
  • 不可从外部创建枚举实例:这确保了不能在枚举类型外部通过 new 操作符来创建额外的枚举实例。枚举常量的实例都是在枚举类定义时就已经确定并唯一存在的,无法通过外部访问构造器来创建新的枚举值。

定义了多个属性,就需要在定义枚举值的时候,给属性都传上值,否则就会报错,

可以通过构造函数重载来实现明面上的枚举值属性数量的不同,但本质上还是一致的

public enum Day {
    MONDAY("Start of the week", 8, false),
    TUESDAY("Regular workday", 8, false),
    SUNDAY("Day of rest", true);  // 不提供工作小时参数

    private String description;
    private int workHours;
    private boolean isWeekend;

    // 构造函数,带有默认值
    Day(String description, int workHours, boolean isWeekend) {
        this.description = description;
        this.workHours = workHours;
        this.isWeekend = isWeekend;
    }

    // 构造函数,当不提供工作小时时,设置为默认值 0
    Day(String description, boolean isWeekend) {
        this(description, 0, isWeekend);  // 默认工作小时为 0
    }

    // 获取方法
    public String getDescription() {
        return description;
    }

    public int getWorkHours() {
        return workHours;
    }

    public boolean isWeekend() {
        return isWeekend;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值