我有一个枚举类型(为了论证而言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)
是的,一点没错.枚举可以有自己的方法,这些方法可以是特定于值的.它看起来像这样:
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)
当然,您可以添加更多方法.