枚举的使用场景

枚举的使用场景

基本定义

复制代码
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}

带属性的枚举

枚举可以拥有字段、方法和构造函数:

复制代码
public enum Day {
    SUNDAY(0), MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6);

    private int dayOfWeek;

    private Day(int dayOfWeek) {
        this.dayOfWeek = dayOfWeek;
    }

    public int getDayOfWeek() {
        return dayOfWeek;
    }
}

使用枚举

枚举的使用与类非常相似,你可以像使用类一样使用枚举:

复制代码
public class Test {
    public static void main(String[] args) {
        Day day = Day.MONDAY;
        System.out.println("Today is " + day);
        System.out.println("Day of the week: " + day.getDayOfWeek());
    }
}

枚举方法

枚举可以有自己的方法,包括抽象方法:

复制代码
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; }
    };

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

枚举与switch语句

枚举常量可以用在switch语句中:

复制代码
public class Test {
    public static void main(String[] args) {
        Day day = Day.MONDAY;
        switch (day) {
            case MONDAY:
                System.out.println("Mondays are tough.");
                break;
            case FRIDAY:
                System.out.println("Fridays are great!");
                break;
            default:
                System.out.println("Midweek.");
                break;
        }
    }
}

枚举迭代

可以使用values()方法遍历枚举的所有常量:

复制代码
for (Day day : Day.values()) {
    System.out.println(day);
}

枚举与Java反射

枚举支持Java反射API,可以动态地获取枚举信息:

复制代码
for (Day day : Day.values()) {
    String name = day.name();
    int ordinal = day.ordinal();
    System.out.println("Name: " + name + ", Ordinal: " + ordinal);
}

枚举实现接口

枚举可以实现接口,这使得枚举可以有行为:

复制代码
public interface Vehicle {
    void drive();
}

public enum Car implements Vehicle {
    BUS {
        @Override
        public void drive() {
            System.out.println("Driving a bus.");
        }
    },
    CAR {
        @Override
        public void drive() {
            System.out.println("Driving a car.");
        }
    };

    @Override
    public abstract void drive();
}

枚举序列化

枚举类型默认实现了Serializable接口,这意味着枚举常量可以被序列化和反序列化。

枚举类提供了一种强大的方式来组织一组相关的常量,并且可以包含方法和属性,使得它们比传统的枚举更加灵活和强大。

posted @   wen-210162704027  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示