Java 枚举(Enums)解析:提高代码可读性与易维护性


Java 枚举(Enums)是 Java 中的一种特殊类,用于定义一组常量。使用枚举可以提高代码的可读性和易维护性,因为它提供了一种类型安全的方式来表示固定的常量集合。下面是关于 Java 枚举的一些实用技巧和示例,帮助您更好地理解和使用它们。

1. 定义枚举

基本定义

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

带有字段和方法的枚举

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

2. 使用枚举

在 switch 语句中使用枚举

Day day = Day.MONDAY;
switch (day) {
    case MONDAY:
        System.out.println("Today is Monday.");
        break;
    case TUESDAY:
        System.out.println("Today is Tuesday.");
        break;
    // 其他情况
    default:
        System.out.println("Other day.");
        break;
}

使用枚举的字段和方法

Planet planet = Planet.EARTH;
System.out.println("Mass: " + planet.getMass());
System.out.println("Radius: " + planet.getRadius());

3. 枚举中的抽象方法

枚举可以包含抽象方法,每个枚举实例必须实现该方法。

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;
        }
    },
    TIMES {
        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);
}

// 使用枚举中的抽象方法
Operation op = Operation.PLUS;
double result = op.apply(3, 4);  // 结果是 7.0
System.out.println("Result: " + result);

4. 枚举与接口

枚举可以实现接口,这样可以确保每个枚举实例实现接口的方法。

public interface Behaviour {
    void action();
}

public enum Animal implements Behaviour {
    DOG {
        @Override
        public void action() {
            System.out.println("Barks");
        }
    },
    CAT {
        @Override
        public void action() {
            System.out.println("Meows");
        }
    },
    BIRD {
        @Override
        public void action() {
            System.out.println("Chirps");
        }
    }
}

// 使用实现了接口的枚举
Animal animal = Animal.DOG;
animal.action();  // 输出:Barks

5. 枚举中的静态方法

枚举可以包含静态方法,例如,根据名称或索引查找枚举实例。

public enum Color {
    RED, GREEN, BLUE;

    public static Color getColor(String name) {
        return Color.valueOf(name.toUpperCase());
    }
}

// 使用静态方法
Color color = Color.getColor("red");
System.out.println(color);  // 输出:RED

6. 覆盖枚举方法

可以覆盖枚举类的 toString 方法来提供自定义的字符串表示。

public enum TrafficLight {
    RED("Stop"), 
    GREEN("Go"), 
    YELLOW("Caution");

    private final String action;

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

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

// 使用覆盖的 toString 方法
TrafficLight light = TrafficLight.RED;
System.out.println(light);  // 输出:Stop

通过这些实用技巧和示例,您可以更好地理解和使用 Java 枚举,从而提高代码的可读性和易维护性。枚举不仅提供了一种定义常量的方式,还可以包含字段、方法和实现接口,使其成为一个功能强大的工具。


原文链接:codingdict.net