枚举:将字符串转换为枚举

see*_*see 3 java enums

public enum Gender{

    m("male"), f("female");

    private final String value;

    private Gender(String option){
          value = option;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以知道如何将字符串“ male”转换为任何枚举吗?是的,该值不同于枚举。这行不通

 Gender.valueOf("male"); 
Run Code Online (Sandbox Code Playgroud)

我当时想提供一个

1)用for循环解析

要么

2)静态初始化一个Map

...

我觉得第二种方法更好,因为初始化地图时,如果存在相同的String,则可以引发运行时异常。

优缺点是什么,或者还有其他更好的解决方案吗?

NPE*_*NPE 5

我会用地图:

public enum Gender {

    m("male"), f("female");

    private final String value;

    private static final Map<String, Gender> values = new HashMap<String, Gender>();
    static {
        for (Gender g : Gender.values()) {
            if (values.put(g.value, g) != null) {
                  throw new IllegalArgumentException("duplicate value: " + g.value);
            }
        }
    }

    private Gender(String option) {
          value = option;
    }

    public static Gender fromString(String option) {
        return values.get(option);
    }
}
Run Code Online (Sandbox Code Playgroud)

与第一种方法相比,我看到了两个优点:

  1. 这种方法可以将字符串转换为GenderO(1)时间,而其他方法需要O(n)的时间。
  2. 这将自动检测重复的值。