使用Enum和EnumSet在Java应用程序中动态获取固定值

时间:2017-06-13 20:19:01

标签: java enums enumset

我正在编写一个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);}

1 个答案:

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

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