【问题标题】:Get fixed values dynamically in a java application using Enum and EnumSet使用 Enum 和 EnumSet 在 Java 应用程序中动态获取固定值
【发布时间】:2017-06-13 20:19:00
【问题描述】:

我正在编写一个 Web 应用程序,其中我需要在系统中有很多固定值来支持操作和 UI。我发现最好将它们放在 Enum 中并使用 EnumSet 将它们分组,如 Snippet 中所述下面。

现在我需要的是一种方法,可以根据我提供的字符串输入仅从特定枚举集中检索值。

例如:方法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);}

【问题讨论】:

    标签: java enums enumset


    【解决方案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;
         }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 2017-06-16
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      相关资源
      最近更新 更多