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

标签 java enums special-characters java-6

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

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

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/

相关文章:

java - 将枚举中的所有元素添加到 ArrayList

web-services - 使用 JAXB 和 JAXWS 注释将枚举属性编码到 XML

mysql - 如何使用 mysqlimport 解析使用特殊字符作为分隔符的文档?

character - 究竟什么是线性空白? (LWS/LWSP)

java - 是否有正确的方法来操纵 GoogleAppEngine 安全权限?

看不到 Java GUI 按钮的标签

c++ - 匿名枚举的用法

java - 定义简单的数学函数并评估结果

java - 当线程进入 Java 中的同步块(synchronized block)/方法时到底发生了什么

javascript - 使用 jspdf 时转换/规范化特殊字符