枚举

枚举的定义

在Java中,枚举(enum)是一种特殊的类,它可以用来定义一组常量。枚举类型是Java语言的关键字,用于定义枚举类型。枚举类型提供了一种方式,可以保证变量的值只能是预定义的常量集合中的一个。以下是枚举的一些基本特性和用法:

定义枚举:

枚举类型定义使用 enum 关键字

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

枚举声明

在zJava中,枚举(enum)是一种特殊的类类型,它允许你定义一组固定的常量。以下是枚举的声明和一些相关的高级特性:

基本枚举声明

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

带属性的枚举

枚举可以有自己的属性,通过在枚举常量中定义构造函数参数来实现:

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

    private final String dayName;

    private Day(String dayName) {
        this.dayName = dayName;
    }

    public String getDayName() {
        return dayName;
    }
}

枚举方法

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

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);
}

实现接口的枚举

枚举也可以实现接口:

public interface Colored {
    String getColor();
}

public enum TrafficLight implements Colored {
    RED("Red"), YELLOW("Yellow"), GREEN("Green");

    private final String color;

    TrafficLight(String color) {
        this.color = color;
    }

    @Override
    public String getColor() {
        return color;
    }
}

枚举构造函数

枚举的构造函数不能被声明为 publicprotected,它们隐式地是 private 的,并且只能由枚举本身调用:

public enum Season {
    SPRING("Spring", 3),
    SUMMER("Summer", 6),
    AUTUMN("Autumn", 9),
    WINTER("Winter", 12);

    private final String seasonName;
    private final int middleMonth;

    Season(String seasonName, int middleMonth) {
        this.seasonName = seasonName;
        this.middleMonth = middleMonth;
    }

    // Getters
    public String getSeasonName() {
        return seasonName;
    }

    public int getMiddleMonth() {
        return middleMonth;
    }
}

枚举实例字段

枚举常量可以有自己的实例字段:

public enum Planet {
    MERCURY(3.303e+23, 2.4397e6),
    VENUS(4.869e+24, 6.0518e6),
    EARTH(5.976e+24, 6.37814e6),
    MARS(6.421e+23, 3.3972e6),
    JUPITER(1.9e+27, 7.1492e7),
    SATURN(5.688e+26, 6.0268e7),
    URANUS(8.686e+25, 2.5559e7),
    NEPTUNE(1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters

    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }

    public double getMass() {
        return mass;
    }

    public double getRadius() {
        return radius;
    }
}

枚举的顺序

枚举常量声明的顺序也定义了它们迭代的顺序,可以通过 values() 方法获取:

for (Planet p : Planet.values()) {
    System.out.println(p);
}

枚举提供了一种类型安全的方式来组织一组相关的常量,并且可以包含字段、方法和构造函数,使得它们比传统的整型常量更加强大和灵活。

posted @ 2024-08-07 19:57  wen-210162704027  阅读(1)  评论(0编辑  收藏  举报