1

如标题所示,我有以下内容Enum

public enum MyEnum {

  FIRST_ENUM("first enum"),
  SECOND_ENUM("second enum"),
  THIRD_ENUM("third enum"),
  FORTH_ENUM("forth enum");

  private final String param;

  private static class Mapper {
    static Map<String, MyEnum> MAP = new HashMap<>();
  }

  MyEnum(String param) {
    this.param = param;
    Mapper.MAP.put(param, this); // Is this going to be a problem?
  }

  public static MyEnum MyEnum(String value) {
    return Holder.MAP.get(value);
  }

}

我想知道是否放置一个其实例化/构造尚未完成的枚举可能会导致问题?

4

2 回答 2

1

您不需要创建单独的 Mapper 类。我们也为我们的用例使用类似的东西。

public enum MyEnum {

    FIRST_ENUM("first enum"),
    SECOND_ENUM("second enum"),
    THIRD_ENUM("third enum"),
    FORTH_ENUM("forth enum");

    private final String param;
    private static final Map<String, MyEnum> MAP = new HashMap<>();
    static {

        for (final MyEnum myEnum : MyEnum.values()) {
            MAP.put(myEnum.param, myEnum);
        }
    }

    MyEnum(String param) {
        this.param = param;
    }

    @JsonCreator
    public static MyEnum myEnumMapper(String value) {
        return MAP.get(value);
    }

}
于 2019-07-27T02:30:48.430 回答
0

在运行时构建地图:

public enum MyEnum {
    FIRST_ENUM("first enum"),SECOND_ENUM("second enum"),THIRD_ENUM("third enum"),FORTH_ENUM("forth enum");
    private final String param;
    MyEnum(String param) {
        this.param=param;
    }
    static void build() {
        for(MyEnum myEnum:MyEnum.values())
            map.put(myEnum.param,myEnum);
    }
    public static void main(String[] arguments) {
        MyEnum.build();
        System.out.println(map);
    }
    private static Map<String,MyEnum> map=new HashMap<>();
}
于 2019-07-27T02:17:10.690 回答