Динамически получать фиксированные значения в 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;
}
Конечно, вы можете хранить список в статическом поле, чтобы избежать повторения при каждом вызове.