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方法将为您提供与特定制造商相关的所有型号。