首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java枚举类型中的get()方法

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

Stack Overflow用户
提问于 2012-07-24 19:56:35
回答 6查看 10.7K关注 0票数 15

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

代码语言:javascript
复制
public enum CarModel {
    DIABLO,
    P911,
    DB7;
}

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

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

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

代码语言:javascript
复制
String country = CarModel.DIABLO.getCountry() // returns Italy
String manufacturer = CarModel.P911.getManufacturer() // returns  Porsche

对于枚举,这是可能的吗?(枚举甚至是做这件事的“正确”方式吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-07-24 20:00:20

你可以做这样的事情。

代码语言:javascript
复制
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;
    }
}
票数 28
EN

Stack Overflow用户

发布于 2012-07-24 20:01:17

是的,完全正确。枚举可以有自己的方法,这些方法可以是特定于值的。它看起来是这样的:

代码语言:javascript
复制
enum CarModel {
    P911 {
        public String getManufacturer() { return "Porsche"; }
    },
    DB7 {
        public String getManufacturer() { return "Aston Martin"; }
    },
    ...
    public abstract String getManufacturer();
}

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

票数 7
EN

Stack Overflow用户

发布于 2012-07-24 20:03:51

我建议将此信息直接添加到枚举中。

如下所示:

代码语言:javascript
复制
public enum CarModel {

    DIABLO("Lambo"),
    P911 ("Porsche");

    private String manufacturer;


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

    public String getManufacturer() {
        return manufacturer;
    }    
}

在这个类中,您只需使用getManufacturer方法

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11630343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档