0

我正在编写一个 Web 应用程序,其中我需要在系统中有很多固定值来支持操作和 UI。我发现最好将它们放在 Enum 中并使用 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);}
4

1 回答 1

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;
     }

您当然可以将列表存储在静态字段中,以避免在每次调用时进行迭代。

于 2017-06-13T20:34:35.187 回答