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

Jon*_*nny 15 java enums

我有一个枚举类型(为了论证而言CarModel),在整个应用程序中使用(许多类).

public enum CarModel {
    DIABLO,
    P911,
    DB7;
}
Run Code Online (Sandbox Code Playgroud)

我有各种方法CarModel以不同的方式使用这个枚举类型,并且每个方法都有一个switch语句,String根据枚举类型设置一些变量,然后继续做其他的事情.(例如,设置某个型号的制造商,或设置原产国等.这些结果在运行时是静态的)

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

我不想使用全部的switch语句,而是希望有静态方法,可以在一个位置进行编辑,并允许类似于以下的行为:

String country = CarModel.DIABLO.getCountry() // returns Italy
String manufacturer = CarModel.P911.getManufacturer() // returns  Porsche
Run Code Online (Sandbox Code Playgroud)

这可能是一个枚举,(并且是一个枚举甚至'正确'的方式来做到这一点?

Jes*_*per 27

你可以做这样的事情.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Ern*_*ill 7

是的,一点没错.枚举可以有自己的方法,这些方法可以是特定于值的.它看起来像这样:

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

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