有效地将java字符串转换为其等效的枚举
给定一个字符串我想在恒定时间内获得它的枚举。 我有一个定义类似于问题所示的枚举。 创建字符串枚举的最佳方法?
public enum Strings { STRING_ONE("ONE"), STRING_TWO("TWO") ; private final String text; /** * @param text */ private Strings(final String text) { this.text = text; } /* (non-Javadoc) * @see java.lang.Enum#toString() */ @Override public String toString() { return text; } }
如果我现在得到一个字符串(说“TWO”),有没有办法看看它是否存在,如果它存在,那么有一种方法可以定义一个将返回枚举值的方法(例如,如果我通过“TWO” “,我应该回来”Strings.STRING_TWO“?
Enum.valueOf()
还不够吗? 你会怎么想象比这更有效率? (通常)不需要枚举STRING_ONE("ONE")
– 只需调用枚举值ONE
,你就可以免费获得.valueOf()
查询。
否则,只需创建一个private static Map
并提供一个类似于private static Map
valueOf()
的类似valueOf()
方法。
由于Enum.valueOf
对enum
的内置名称(即"STRING_ONE"
和"STRING_TWO"
)进行操作,因此您需要滚动自己的“注册表”名称到枚举,如下所示:
public enum Strings { STRING_ONE("ONE"), STRING_TWO("TWO") ; private static final Map byName = new HashMap(); private final String text; private Strings(final String text) { this.text = text; } static { for (Strings s : Strings.values()) { byName.put(s.toString(), s); } } @Override public String toString() { return text; } public static Strings forName(String name) { return byName.get(name); } }
演示。
上面是一个从字符串名称到enum Strings
的映射用于进行翻译。 如果名称不存在,则从Strings.forName
方法返回null
。
我认为您需要将代码更改为:
public enum Strings { STRING_ONE("ONE"), STRING_TWO("TWO"); private String text; /** * @param text */ private Strings(final String text) { this.text = text; } public String getText() { return this.text; } public static Strings getByTextValue(String text) { for (Strings str : Strings.values()) { if (str.getText().equals(text)) { return str; } } return null; } /* * (non-Javadoc) * * @see java.lang.Enum#toString() */ @Override public String toString() { return text; } }
示例:
String test = "ONE"; Strings testEnum = Strings.getByTextValue(test);
现在你有testEnum
这是enum
引用