作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前从事解析器方面的工作。我走一棵树,其中大部分都是确定性的(我能找到的值数量有限)。
通常在这些情况下,我会使用我希望找到的值的名称创建一个枚举,如下所示:
public enum myElements{
like,
not_like,// "not like" is transformed in not_like by parser
exists;
}
在这种情况下,我可以通过这种方式检查字符串是否属于枚举:
String my_string;
myElements.valueOf(my_string);
问题是目前我使用特殊字符({">"、"<"、"<>"、...)无法使用特殊字符创建枚举值。
我想要的是将枚举与那些特殊字符元素相关联,比如
public enum myElements{
greather_than(">"),
smaller_than("<")
}
并继续使用像这样简单的东西:
myElements.valueOf(my_string);
目前我在所有地方都使用枚举,但对于这些元素,我使用了表格。我想协调这个
顺便说一句,由于某些依赖关系,我使用 Java6。
欢迎提出想法,谢谢!
编辑:
这是我使用的当前表格版本的示例:
public static String[] compElements = {">", "<", "<>", "=", "<=", ">="};
与 valueOf 的等价物:
Arrays.asList(compElements).contains(my_string);
最佳答案
听起来您只是想让枚举存储所有“灵活”名称的映射,将名称映射到枚举值。您将无法使用 valueOf
,但您可以轻松编写自己的静态方法来返回相关的映射值。在静态初始化程序 block 中创建 map 。 (不要忘记,当自动调用构造函数时,静态初始化器不会执行。)
示例代码:
public enum Foo {
// Idiomatic Java names. You could ignore those if you really want,
// and overload the constructor to have a parameterless one which calls
// name() if you really want.
FIRST("first"),
SECOND("second"),
WITH_SPACE("with space");
private static final Map<String, Foo> nameToValueMap;
static {
// Really I'd use an immutable map from Guava...
nameToValueMap = new HashMap<String, Foo>();
for (Foo foo : EnumSet.allOf(Foo.class)) {
nameToValueMap.put(foo.friendlyName, foo);
}
}
private final String friendlyName;
private Foo(String friendlyName) {
this.friendlyName = friendlyName;
}
public String getFriendlyName() {
return friendlyName;
}
public static Foo fromFriendlyName(String friendlyName) {
return nameToValueMap.get(friendlyName);
}
}
关于java - 具有特殊字符的枚举 : How to?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11228235/
我是一名优秀的程序员,十分优秀!