【问题标题】:Convert String to equivalent Enum value将字符串转换为等效的枚举值
【发布时间】:2011-10-26 18:48:19
【问题描述】:

我是否可以使用 Java 将 String 转换为 Enumeration 中的等效值。

我当然可以使用大的if-else 语句来做到这一点,但如果可能的话,我想避免这种情况。

鉴于此文档:

http://download.oracle.com/javase/1.4.2/docs/api/java/util/Enumeration.html

我不太希望在没有 if 或 case 语句的情况下实现这一点。

【问题讨论】:

    标签: java enums


    【解决方案1】:

    希望您意识到,java.util.Enumeration 与 Java 1.5 的 Enum 类型不同。

    您可以简单地使用YourEnum.valueOf("String") 来获得等效的枚举类型。

    因此,如果您的枚举是这样定义的:

    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
        THURSDAY, FRIDAY, SATURDAY
    }
    

    你可以这样做:

    String day = "SUNDAY";
    
    Day dayEnum = Day.valueOf(day);
    

    【讨论】:

    【解决方案2】:

    假设您使用 Java 5 枚举(由于您提到旧的 Enumeration 类,所以不太确定),您可以使用 java.lang.Enum 子类的 valueOf 方法:

    MyEnum e = MyEnum.valueOf("ONE_OF_CONSTANTS");
    

    【讨论】:

      【解决方案3】:

      使用为每个enum 定义的静态方法valueOf(String)

      例如,如果你有enum MyEnum,你可以说MyEnum.valueOf("foo")

      【讨论】:

        【解决方案4】:

        我可能过度设计了自己的解决方案,而没有意识到 Type.valueOf("enum string") 确实存在。

        我猜它提供了更精细的控制,但我不确定它是否真的有必要。

        public enum Type {
            DEBIT,
            CREDIT;
        
            public static Map<String, Type> typeMapping = Maps.newHashMap();
            static {
                typeMapping.put(DEBIT.name(), DEBIT);
                typeMapping.put(CREDIT.name(), CREDIT);
            }
        
            public static Type getType(String typeName) {
                if (typeMapping.get(typeName) == null) {
                    throw new RuntimeException(String.format("There is no Type mapping with name (%s)"));
                }
                return typeMapping.get(typeName);
            }
        }
        

        我猜你正在用IllegalArgumentException 交换RuntimeException(或任何你想抛出的异常),这可能会清理代码。

        【讨论】:

          猜你喜欢
          • 2010-10-07
          • 2015-09-30
          • 1970-01-01
          • 2010-10-03
          • 1970-01-01
          • 2014-09-27
          • 1970-01-01
          相关资源
          最近更新 更多