java 枚举类型中的 get() 方法

2022-09-03 09:05:13

我有一个枚举类型(比如为了参数),在整个应用程序(许多类)中使用。CarModel

public enum CarModel {
    DIABLO,
    P911,
    DB7;
}

我有各种方法以不同的方式使用此枚举类型,每种方法都有一个switch语句,用于根据枚举类型设置一些变量,然后再继续执行其他操作。(例如,设置某些型号的制造商,或设置原产国等。这些结果在运行时是静态的)CarModelString

问题是,如果我想向枚举中添加一个新模型,我需要转到每个方法,并扩展/修改switch语句以处理其存在。这很容易导致人为错误和/或代码重复(如果各种方法使用相同的switch语句)。

我希望使用静态方法,而不是到处使用 switch 语句,这些方法可以在单个位置进行编辑,并允许类似于以下内容的行为:

String country = CarModel.DIABLO.getCountry() // returns Italy
String manufacturer = CarModel.P911.getManufacturer() // returns  Porsche

这可以通过枚举来实现吗(枚举甚至是执行此操作的“正确”方法吗?


答案 1

你可以做这样的事情。

public enum CarModel {
    DIABLO("Lamborghini", "Italy"),
    P911("Porsche", "Germany");

    private String manufacturer;
    private String country;

    private CarModel(String manufacturer, String country) {
        this.manufacturer = manufacturer;
        this.country = country;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public String getCountry() {
        return country;
    }
}

答案 2

是的,绝对可以。枚举可以有自己的方法,这些方法可以是特定于值的。它看起来像这样:

enum CarModel {
    P911 {
        public String getManufacturer() { return "Porsche"; }
    },
    DB7 {
        public String getManufacturer() { return "Aston Martin"; }
    },
    ...
    public abstract String getManufacturer();
}

当然,您可以添加更多方法。