【问题标题】:How can I use a string as argument for a method that takes an enum?如何使用字符串作为采用枚举的方法的参数?
【发布时间】:2014-03-07 12:14:51
【问题描述】:

我有一堂课TestCase。在这里面我有内部类Test。在enum OwnerType 类内部是枚举的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 方法?

【问题讨论】:

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

标签: java enums setter


【解决方案1】:

你必须使用OwnerType#valueOf(String name) 方法:

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

【讨论】:

    【解决方案2】:

    你必须先parse it into an enum

    试试这个:

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

    请注意,您可以使用Enum.valueOf(YourEnum.class, stringValue)YourEnum.valueOf(stringValue)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多