Динамически получать фиксированные значения в Java-приложении, используя Enum и EnumSet

Я пишу веб-приложение, в котором мне нужно иметь много фиксированных значений в системе для поддержки операций и пользовательского интерфейса. Я понял, что лучше поместить их в Enum и сгруппировать их, используя EnumSet, как описано в фрагменте ниже.

Теперь мне нужен способ извлечения только значений из определенного набора перечислений на основе входных данных String, которые я предоставляю.

Например: метод getFixedValues ​​(идентификатор); где в идентификаторе ="VehicleType" должен возвращать CAR("10"), BIKE("20"),TRUCK("30")

Я попробовал несколько вещей, но не смог найти выход через EnumSet.

public enum MyEnum {

CAR("10"),
BIKE("20"),
TRUCK("30"),

XML("100"),
EDI("300"),

APP1("A1"),
APP2("A2");

String value;

private MyEnum() {

}

private MyEnum(String value) {
    this.value = value;
}

public static EnumSet<MyEnum> VehicleType = EnumSet.of(CAR, BIKE, TRUCK);
public static EnumSet<MyEnum> MessageType = EnumSet.of(XML, EDI);
public static EnumSet<MyEnum> ApplicationType = EnumSet.of(APP1, APP2);}

1 ответ

Ваши значения перечисления действительно не связаны между собой.
Вы смешиваете типы транспортных средств с форматами данных и своего рода идентификаторами приложений:

CAR("10"),
BIKE("20"),
TRUCK("30"),

XML("100"),
EDI("300"),

APP1("A1"),
APP2("A2");

Я считаю, что определение отдельного перечисления для каждого из этих понятий более понятно.

Помимо этого вопроса о концепции, для удовлетворения ваших потребностей вы можете добавить новое поле identifier определить MyEnum значение.
Тип поля может быть другим общедоступным перечислением, объявленным в этом перечислении.

public enum MyEnum {

  CAR("10", Type.VEHICLE_TYPE),
  BIKE("20", Type.VEHICLE_TYPE),
  TRUCK("30", Type.VEHICLE_TYPE),

  XML("100",  Type.DATE_FORMAT),
  EDI("300", Type.DATE_FORMAT),),
   ...

  public enum Type{
     VEHICLE_TYPE, DATE_FORMAT, ...
  }

  String value;
  Type type;

  private MyEnum(String value, Type type) {
    this.value = value;
    this.type = type;
  }

  public static List<MyEnum>  getFixedValues(Type type){
   List<MyEnum> enums = new ArrayList<>();
   for (MyEnum myEnum : values()){
      if (myEnum.type == type){
         enums.add(myEnum);
       }
    }
    return enums;
  }

...
}

Тогда вы могли бы объявить getFixedValues(Type type) метод:

   public static List<MyEnum>  getFixedValues(Type type){
       List<MyEnum> enums = new ArrayList<>();
       for (MyEnum myEnum : values()){
          if (myEnum.type == type){
             enums.add(myEnum);
           }
        }
       return enums;
     }

Конечно, вы можете хранить список в статическом поле, чтобы избежать повторения при каждом вызове.

Другие вопросы по тегам