java如何将String转换为enum

标签 IT工具网 java

问题

假设定义了如下的enum(枚举):

public enum Blah {
    A, B, C, D
}

已知枚举对应的String值,希望得到对应的枚举值。例如,已知”A”,希望得到对应的枚举——Blah.A,应该怎么做?
Enum.valueOf()是否能实现以上目的,如果是,那我如何使用?

答案

是的,Blah.valueOf(“A”) 将会得到 Blah.A

静态方法valueOf() 和 values() 不存在于源码中,而是在编译时创建,我们也可以在JavaDoc查看到它们,比如 Dialog.ModalityTyp 就中出现这两个方法。

其他答案

当文本和枚举值不同时,可以采用这种方式:

public enum Blah {
  A("text1"),
  B("text2"),
  C("text3"),
  D("text4");

  private String text;

  Blah(String text) {
    this.text = text;
  }

  public String getText() {
    return this.text;
  }

  public static Blah fromString(String text) {
    for (Blah b : Blah.values()) {
      if (b.text.equalsIgnoreCase(text)) {
        return b;
      }
    }
    return null;
  }
}

fromString方法中,throw new IllegalArgumentException(“No constant with text ” + text + “ found”) 会比直接返回null更优秀.

其他答案

我有一个挺赞的工具方法:

/**
 * A common method for all enums since they can't have another base class
 * @param <T> Enum type
 * @param c enum type. All enums must be all caps.
 * @param string case insensitive
 * @return corresponding enum, or null
 */
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
    if( c != null && string != null ) {
        try {
            return Enum.valueOf(c, string.trim().toUpperCase());
        } catch(IllegalArgumentException ex) {
        }
    }
    return null;
}

你可以这么使用:

public static MyEnum fromString(String name) {
    return getEnumFromString(MyEnum.class, name);
}

stackoverflow链接:http://stackoverflow.com/questions/604424/convert-a-string-to-an-enum-in-java

相关文章:

java - 使用什么作为 SQL 数据库日期的主键

java - 休息模板错误 403

大佬们,请慢点采集

LinkedList、ArrayList各自的使用场景,如何确认应该用哪一个呢?

java - "Double Brace Initialization"的效率问题

java - adobe AEM com.adobe.granite.api maven 依赖

java - Geckodriver 突然开始失败

java - 简单的服务器/套接字程序中不完整的连接

如何克隆Clone一个JavaScript对象

如何使用Java创建一个内存泄漏的程序