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