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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (8)

我有一个枚举类型(用于参数CarModel),用于整个应用程序(无数类)。

public enum CarModel {
    DIABLO,
    P911,
    DB7;
}

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

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

我不想全面使用switch语句,我想要有静态方法,可以在单个位置进行编辑,并允许类似于以下的行为:

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

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

提问于
用户回答回答于

你可以做这样的事情。

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;
    }
}
用户回答回答于

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

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

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

扫码关注云+社区