在Java中将随机字符串转换为枚举
我已经定义了这个枚举,客户机可以在其中传入一些随机类型,我希望将它们转换为一致的可用形式:在Java中将随机字符串转换为枚举,java,enums,Java,Enums,我已经定义了这个枚举,客户机可以在其中传入一些随机类型,我希望将它们转换为一致的可用形式: package com.amazon.dvpatemplateselectionservice.types; public enum Cases { LOWERCASE("lowercase"), UPPERCASE("UPPERCASE"), CAMEL("camelCased"); private final String someCase; Cases(final St
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
这里缺少什么?到
Enum#valueOf
的name
参数需要与声明完全相同的Enum名称,这对您的输入不起作用
您需要使用自定义查找方法,如下面的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());
Enum#valueOf
的name
参数要求枚举名称与声明的名称完全相同,这对您的输入不起作用
您需要使用自定义查找方法,如下面的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());
Cases.valueOf(String)
正在查找枚举项的常量名称。例如,这是小写
,大写
和驼峰
如果要从字段中查找枚举项,请编写一个方法
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));
}
Cases.valueOf(String)
正在查找枚举项的常量名称。例如,这是小写
,大写
和驼峰
如果要从字段中查找枚举项,请编写一个方法
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));
}
Enum.valueOf(类enumType,字符串名称)
尝试使用给定的名称创建类型为enumType
的枚举
因此,您必须构造一个自定义查找方法,在调用的case
字段中使用该方法来构造类型case的枚举。enum.valueOf(Class enumType,String name)
尝试使用给定的名称创建类型enumType
的枚举
因此,您必须构造一个自定义查找方法,在调用的case
字段中使用该方法来构造类型case的枚举。在enum
中添加此方法(我将case
重命名为\u case
,因为case
是禁止的java关键字):
然后:
Cases whatever = Cases.fromLabel("camelCased");
在enum
中添加此方法(我将case
重命名为\u case
,因为case
是禁止使用的java关键字):
然后:
Cases whatever = Cases.fromLabel("camelCased");
你需要手动查找它。而case
作为字段名不会编译case
不是有效的标识符eah这只是我给出的一个随机示例。不过,我会改变这个问题。@ernest_k说了什么。此外,您还需要添加逻辑来处理用户传入的字符串不映射到枚举的情况。您需要手动查找它。而case
作为字段名不会编译case
不是有效的标识符eah这只是我给出的一个随机示例。不过,我会改变这个问题。@ernest_k说了什么。此外,还需要添加逻辑来处理用户传入的字符串不映射到枚举的情况。