gpt4 book ai didi

java - 具有特殊字符的枚举 : How to?

转载 作者:行者123 更新时间:2023-11-29 05:58:10 25 4
gpt4 key购买 nike

我目前从事解析器方面的工作。我走一棵树,其中大部分都是确定性的(我能找到的值数量有限)。

通常在这些情况下,我会使用我希望找到的值的名称创建一个枚举,如下所示:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com