Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将随机字符串转换为枚举_Java_Enums - Fatal编程技术网

在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说了什么。此外,还需要添加逻辑来处理用户传入的字符串不映射到枚举的情况。