代码之家  ›  专栏  ›  技术社区  ›  snakespan

将随机字符串转换为Java中的枚举[duplicate]

  •  0
  • snakespan  · 技术社区  · 6 年前

    package com.amazon.dvpatemplateselectionservice.types;
    
    public enum Cases {
        LOWERCASE("lowercase"), UPPERCASE("UPPERCASE"), CAMEL("camelCased");
    
        private final String someCase;
    
        Cases(final String inputCase) {
            this.someCase = inputCase;
        }
    }
    

    当我在代码中调用它时,我希望客户端的输入转换为枚举:

    Cases whatever = Cases.valueOf(Cases.class, requestParams.getValue());
    
    Class someClass = new Class(whatever);
    

    我得到的错误是:

    java.lang.IllegalArgumentException: camelCased is not a constant in Cases
    

    我错过了什么?

    4 回复  |  直到 6 年前
        1
  •  0
  •   ToYonos    6 年前

    将此方法添加到 enum case _case 作为 是禁止的java关键字):

    public static Cases fromLabel(String label)
    {
        return Stream.of(Cases.values())
        .filter(c -> c._case.equals(label))
        .findFirst().orElse(null);
    }
    

    然后:

    Cases whatever = Cases.fromLabel("camelCased");
    
        2
  •  1
  •   ernest_k    6 年前

    name 参数到 Enum#valueOf 期望枚举名与声明的完全相同,这对您的输入不起作用。

    您需要使用自定义查找方法,例如 find 下图:

    enum Cases {
        LOWERCASE("lowercase"), UPPERCASE("UPPERCASE"), CAMEL("camelCased");
    
        private final String caze;
    
        Cases(final String inputCase) {
            this.caze = inputCase;
        }
    
        public static Cases find(String c) {
            //you can also just loop
            return Stream.of(values()).filter(v -> v.caze.equals(c))
                     .findFirst().orElse(null);
        }
    }
    

    Cases whatever = Cases.find(requestParams.getValue());
    
        3
  •  1
  •   khelwood    6 年前

    Cases.valueOf(String) LOWERCASE , UPPERCASE CAMEL .

    如果要从字段中查找枚举项,请编写一个方法。

    public static Cases fromString(String string) {
        return Arrays.stream(Cases.values())
                     .filter(x -> x.someCase.equals(string))
                     .findAny()
                     .orElseThrow(() -> new IllegalArgumentException("No such case: "+string));
    }
    
        4
  •  0
  •   ptikobj    6 年前

    Enum.valueOf(Class<T> enumType, String name) 尝试创建类型为的枚举 enumType 与给定的 name ( see Enum.valueOf javadoc ).

    case 构造类型Cases的枚举。