Java 使用基于制造商的枚举
Java use Enum based on Manufacturer
我想要两个枚举,第一个应该包含所有汽车制造商,第二个应该包含每个制造商的所有型号。由于大小限制,我为每个制造商创建了一个枚举,例如 CarManufacturer
,ModelsBMW
.
现在我想使用基于制造商的模型。
public enum CarManufacturer {
BMW,
Audi;
public CarModels getModel(CarManufacturer i){
switch(i.name()){
case "BMW":
return ModelsBMW;
break;
case "Audi":
return ModelsAudi;
break;
}
}
}
public enum ModelsBMW {
M1("M1");
//... more BMW models
}
将会添加和删除更多的制造商和型号。
有没有办法在 getModel() 中选择正确的枚举而不用写每个案例?
您可以如下使用 enum
来避免切换情况:
枚举代码:
enum CarManufacturer {
BMW(ModelsBMW::values), Audi(ModelsAudi::values);
private Supplier<CarModels[]> objectCreator;
CarManufacturer(final Supplier<CarModels[]> objectCreator) {
this.objectCreator = objectCreator;
}
public CarModels[] getModels() {
return objectCreator.get();
}
}
成功代码构建的基本相关代码:
interface CarModels {
}
enum ModelsBMW implements CarModels {
M1("M1");
private String model;
private ModelsBMW(String model) {
this.model = model;
}
}
enum ModelsAudi implements CarModels {
A1("A1");
private String model;
private ModelsAudi(String model) {
this.model = model;
}
}
此处getModels
方法将为您提供与特定制造商相关的所有型号。
我想要两个枚举,第一个应该包含所有汽车制造商,第二个应该包含每个制造商的所有型号。由于大小限制,我为每个制造商创建了一个枚举,例如 CarManufacturer
,ModelsBMW
.
现在我想使用基于制造商的模型。
public enum CarManufacturer {
BMW,
Audi;
public CarModels getModel(CarManufacturer i){
switch(i.name()){
case "BMW":
return ModelsBMW;
break;
case "Audi":
return ModelsAudi;
break;
}
}
}
public enum ModelsBMW {
M1("M1");
//... more BMW models
}
将会添加和删除更多的制造商和型号。 有没有办法在 getModel() 中选择正确的枚举而不用写每个案例?
您可以如下使用 enum
来避免切换情况:
枚举代码:
enum CarManufacturer {
BMW(ModelsBMW::values), Audi(ModelsAudi::values);
private Supplier<CarModels[]> objectCreator;
CarManufacturer(final Supplier<CarModels[]> objectCreator) {
this.objectCreator = objectCreator;
}
public CarModels[] getModels() {
return objectCreator.get();
}
}
成功代码构建的基本相关代码:
interface CarModels {
}
enum ModelsBMW implements CarModels {
M1("M1");
private String model;
private ModelsBMW(String model) {
this.model = model;
}
}
enum ModelsAudi implements CarModels {
A1("A1");
private String model;
private ModelsAudi(String model) {
this.model = model;
}
}
此处getModels
方法将为您提供与特定制造商相关的所有型号。