Java 如何使用字符串作为接受枚举的方法的参数?

Java 如何使用字符串作为接受枚举的方法的参数?,java,enums,setter,Java,Enums,Setter,我有一个类TestCase。在这里面我有一个内部类Test。在类enum OwnerType中有enum的setter和getter public static final class Test{ public enum OwnerType { User("User"), Role("Role"); } public OwnerType getOwnerType() { return m_ownerType; }

我有一个类
TestCase
。在这里面我有一个内部类
Test
。在类
enum OwnerType
中有enum的setter和getter

public static final class Test{
    public enum OwnerType {
        User("User"), 
        Role("Role");
    }

    public OwnerType getOwnerType() {
        return m_ownerType;
    }

    public void setOwnerType(OwnerType m_ownerType) {
        this.m_ownerType = m_ownerType;
    }
}
Test
在我的例子中是内部类。我正在尝试使用JSON键设置值

private Test createTest(JSONObject obj) {
    Test test = new Test();
    test.setOwnerType(JSONUtil.getStringValue(obj, JSON_KEY)); // Gives error
    return test;
}  
它给出了一个错误

类型
TestCase.Test
中的方法
setOwnerType(TestCase.Test.OwnerType)
不适用于参数(
String

如何转换该值或将其设置为
createTest
方法?

必须先进行转换

请尝试以下方法:

test.setOwnerType(Test.OwnerType.valueOf(JSONUtil.getStringValue(obj, JSON_KEY)));

请注意,您可以执行
Enum.valueOf(YourEnum.class,stringValue)
YourEnum.valueOf(stringValue)
您必须使用
OwnerType#valueOf(String name)
方法:

String name = JSONUtil.getStringValue(obj, JSON_KEY);
test.setOwnerType(Test.OwnerType.valueOf(name));

JSON中的实际值是多少?枚举的完整、可编译的代码是什么?上面的代码不可编译,您需要将枚举代码更改为
public enum OwnerType{User,Role;}
,或者需要一个带字符串类型参数的
OwnerType
构造函数。是。我拥有的构造函数喜欢私有的最终字符串值;私有所有者类型(字符串值){this.value=value;}确定。您已经可以使用
m_ownerType.name()
m_ownerType.toString()
获取枚举的名称(请查看Javadoc以了解何时使用该名称)