Java中学习Enum


一、前言

enum 在 Java 中不仅可以用于定义常量,还可以包含方法、字段和构造函数,使其功能更加丰富和灵活。下面是一些进阶使用的示例:

1. 定义字段和方法

你可以在 enum 中定义字段、方法和构造函数。这样可以将更多的行为和数据关联到每个常量上。

public enum Day {
    MONDAY("Monday", false),
    TUESDAY("Tuesday", false),
    WEDNESDAY("Wednesday", false),
    THURSDAY("Thursday", false),
    FRIDAY("Friday", false),
    SATURDAY("Saturday", true),
    SUNDAY("Sunday", true);

    private final String name;
    private final boolean isWeekend;

    Day(String name, boolean isWeekend) {
        this.name = name;
        this.isWeekend = isWeekend;
    }

    public String getName() {
        return name;
    }

    public boolean isWeekend() {
        return isWeekend;
    }

    @Override
    public String toString() {
        return name;
    }
}

在上面的代码中,Day 枚举包含了两个字段:nameisWeekend,以及它们的 getter 方法和一个 toString 方法来返回自定义的字符串表示。

2. 实现接口

enum 可以实现接口,使其可以具有额外的功能或行为。

interface Describable {
    String getDescription();
}

public enum Day implements Describable {
    MONDAY("First day of the work week"),
    TUESDAY("Second day of the work week"),
    WEDNESDAY("Middle of the work week"),
    THURSDAY("Second to last day of the work week"),
    FRIDAY("Last day of the work week"),
    SATURDAY("Start of the weekend"),
    SUNDAY("End of the weekend");

    private final String description;

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

    @Override
    public String getDescription() {
        return description;
    }
}

在这个例子中,Day 枚举实现了 Describable 接口,并提供了 getDescription 方法。

3. 使用静态方法

enum 可以定义静态方法,这些方法可以用于获取 enum 的实例或执行其他操作。

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;

    public static Day fromString(String dayName) {
        for (Day day : Day.values()) {
            if (day.name().equalsIgnoreCase(dayName)) {
                return day;
            }
        }
        throw new IllegalArgumentException("No enum constant for " + dayName);
    }
}

在这个示例中,fromString 方法将字符串转换为 Day 枚举的实例。

4. 重写 toString 方法

你可以重写 toString 方法,以提供更适合的字符串表示。

public enum Day {
    MONDAY("Mon"),
    TUESDAY("Tue"),
    WEDNESDAY("Wed"),
    THURSDAY("Thu"),
    FRIDAY("Fri"),
    SATURDAY("Sat"),
    SUNDAY("Sun");

    private final String abbreviation;

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

    @Override
    public String toString() {
        return abbreviation;
    }
}

在这个例子中,toString 方法返回了缩写形式的星期几。

5. 使用构造函数

enum 枚举常量可以使用构造函数来初始化字段。注意构造函数默认是 private 的。

public enum Status {
    NEW("New Order"),
    PROCESSING("Order is being processed"),
    SHIPPED("Order has been shipped"),
    DELIVERED("Order has been delivered");

    private final String description;

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

    public String getDescription() {
        return description;
    }
}

这些进阶用法使 enum 在 Java 编程中变得非常强大和灵活。通过字段、方法和构造函数的组合,你可以将更多的逻辑和数据封装在 enum 常量中,使代码更加清晰和易于维护。

二、使用案例

下面是使用上述 enum 的一些调用案例:

1. 使用 Day 枚举

public class Main {
    public static void main(String[] args) {
        // 访问枚举常量
        Day today = Day.SATURDAY;

        // 使用方法
        System.out.println("Today is " + today.getName()); // 输出: Today is Saturday
        System.out.println("Is it a weekend? " + today.isWeekend()); // 输出: Is it a weekend? true

        // 使用静态方法
        Day dayFromString = Day.fromString("Monday");
        System.out.println("Day from string: " + dayFromString); // 输出: Day from string: MONDAY
    }
}

2. 使用 Describable 接口

public class Main {
    public static void main(String[] args) {
        // 访问枚举常量
        Day today = Day.FRIDAY;

        // 使用接口方法
        System.out.println(today.getDescription()); // 输出: Last day of the work week
    }
}

3. 使用 Status 枚举

public class Main {
    public static void main(String[] args) {
        // 访问枚举常量
        Status orderStatus = Status.SHIPPED;

        // 使用方法
        System.out.println("Order status: " + orderStatus.getDescription()); // 输出: Order status: Order has been shipped
    }
}

4. 使用 toString 方法

public class Main {
    public static void main(String[] args) {
        // 访问枚举常量
        Day today = Day.WEDNESDAY;

        // 使用重写的 toString 方法
        System.out.println("Abbreviation for today: " + today); // 输出: Abbreviation for today: Wed
    }
}

这些例子展示了如何在实际应用中调用和使用 enum,充分利用其提供的各种功能和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

和烨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值