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,则可以引发运行时异常。
优缺点是什么,或者还有其他更好的解决方案吗?
我会用地图:
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)
与第一种方法相比,我看到了两个优点:
Gender在O(1)时间,而其他方法需要O(n)的时间。