java

78. Java 枚举类 - 在枚举中添加成员(字段、构造方法、

2025-05-14  本文已影响0人  Cache技术分享

78. Java 枚举类 - 在枚举中添加成员(字段、构造方法、方法)

在 Java 中,枚举不仅仅是一些常量的集合,它实际上是 一种特殊的类,可以包含:

字段(变量)
构造方法
实例方法

如果我们想给枚举常量添加额外的信息(比如缩写、数值等),就可以使用这些功能! 🚀


1️⃣ 为什么要给枚举添加字段?

假设我们有一个 DayOfWeek 枚举,默认情况下,它只有:

public enum DayOfWeek {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

但如果我们 想为每个星期几添加一个缩写(比如 MON 代表 Monday)怎么办?
我们不能简单地这样写:

DayOfWeek today = DayOfWeek.MONDAY;
System.out.println(today + " -> MON");  // ❌ 不够优雅

正确的做法:在 DayOfWeek 枚举中添加字段和方法! 💡


2️⃣ 给枚举添加字段和方法

public enum DayOfWeek {
    // 添加缩写字段(MON, TUE, WED...)
    MONDAY("MON"), TUESDAY("TUE"), WEDNESDAY("WED"), 
    THURSDAY("THU"), FRIDAY("FRI"), 
    SATURDAY("SAT"), SUNDAY("SUN");

    private final String abbreviation; // 定义私有字段

    // 构造方法
    DayOfWeek(String abbreviation) {
        this.abbreviation = abbreviation;
    }

    // 获取缩写的方法
    public String getAbbreviation() {
        return abbreviation;
    }
}

public class EnumTest {
    public static void main(String[] args) {
        DayOfWeek today = DayOfWeek.FRIDAY;
        System.out.println("Today is " + today + ", abbreviation: " + today.getAbbreviation());
    }
}

💡 输出

Today is FRIDAY, abbreviation: FRI

3️⃣ 代码解析

✅ 1. 枚举常量可以有参数

MONDAY("MON"), TUESDAY("TUE"), WEDNESDAY("WED"), ...

✅ 2. 枚举可以有字段

private final String abbreviation;

✅ 3. 枚举可以有构造方法

DayOfWeek(String abbreviation) {
    this.abbreviation = abbreviation;
}

✅ 4. 枚举可以有方法

public String getAbbreviation() {
    return abbreviation;
}

4️⃣ 枚举可以有多个字段

除了缩写,我们还能给每一天添加“是否是工作日”这个字段

public enum DayOfWeek {
    MONDAY("MON", true), TUESDAY("TUE", true), WEDNESDAY("WED", true), 
    THURSDAY("THU", true), FRIDAY("FRI", true), 
    SATURDAY("SAT", false), SUNDAY("SUN", false);

    private final String abbreviation;
    private final boolean isWeekday;

    DayOfWeek(String abbreviation, boolean isWeekday) {
        this.abbreviation = abbreviation;
        this.isWeekday = isWeekday;
    }

    public String getAbbreviation() {
        return abbreviation;
    }

    public boolean isWeekday() {
        return isWeekday;
    }
}

public class EnumTest {
    public static void main(String[] args) {
        DayOfWeek today = DayOfWeek.FRIDAY;
        System.out.println(today + " (" + today.getAbbreviation() + "), is it a weekday? " + today.isWeekday());
    }
}

💡 输出

FRIDAY (FRI), is it a weekday? true

📌 代码解析


5️⃣ 枚举可以有抽象方法

我们甚至可以给枚举定义不同的行为,比如:

public enum Operation {
    ADD {
        public double apply(double x, double y) {
            return x + y;
        }
    },
    SUBTRACT {
        public double apply(double x, double y) {
            return x - y;
        }
    },
    MULTIPLY {
        public double apply(double x, double y) {
            return x * y;
        }
    },
    DIVIDE {
        public double apply(double x, double y) {
            return x / y;
        }
    };

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

public class EnumTest {
    public static void main(String[] args) {
        double result = Operation.MULTIPLY.apply(10, 5);
        System.out.println("Multiplication result: " + result);
    }
}

💡 输出

Multiplication result: 50.0

📌 代码解析


6️⃣ 什么时候使用枚举字段?

适合使用的情况

不适合使用的情况


🔹 总结

特性 说明
枚举可以有字段 ✅ 可以存储额外信息(如缩写、数值等)
枚举可以有构造方法 ✅ 只能是 private,用于初始化字段
枚举可以有方法 ✅ 可以添加 getAbbreviation() 之类的方法
枚举可以有多个字段 ✅ 可以存储多个信息(如 abbreviationisWeekday
枚举可以有抽象方法 ✅ 适用于不同的行为(如 apply() 方法)

希望这个讲解能帮你更好地理解 如何给枚举添加字段、构造方法和方法!🚀 🎯

上一篇 下一篇

猜你喜欢

热点阅读