我正在编写一个Web应用程序,我需要在系统中有很多固定值来支持操作和UI。我发现最好将它们放在Enum中并使用EnumSet对它们进行分组,如代码片段中所述下方。
现在我需要的是一种基于我提供的String输入仅从特定枚举集中检索值的方法。
例如:一个方法getFixedValues(identifier);在identifer =“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);}
答案 0 :(得分:0)
你的枚举值似乎与它们之间没有关系 您可以将车辆类型与数据格式和一种应用程序标识符混合使用:
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;
}
您当然可以将列表存储在静态字段中,以避免在每次调用时进行迭代。