加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 当枚举类型引用是Class <?>时,如何将String转换

发布时间:2020-12-15 02:52:44 所属栏目:Java 来源:网络整理
导读:我有使用setter方法在对象上设置值的代码.其中一个setter将Enum类型作为方法参数.代码看起来像这样: String value = "EnumValue1"; Method setter = getBeanWriteMethod("setMyEnumValue"); Class? type = setter.getParameterTypes()[0]; Object converted
我有使用setter方法在对象上设置值的代码.其中一个setter将Enum类型作为方法参数.代码看起来像这样:
String value = "EnumValue1";
    Method setter = getBeanWriteMethod("setMyEnumValue");
    Class<?> type = setter.getParameterTypes()[0];
    Object convertedValue = null;
    if (type.isEnum()) {
       convertedValue = convertToEnum(value,type);
    } else {
       convertedValue = ClassUtils.convertType(value,type);
    }
    return convertedValue;

问题是在convertToEnum方法中放入什么.我知道我可以通过迭代类型对象的枚举常量(或字段)来“强制它”,匹配值.我是否忽略了使用Reflection进行更简单的方法? (我查看了几个例子,但没有找到任何枚举只能通过Class知道的地方).

解决方法

脱离我的头顶:
Enum<?> convertedValue = Enum.valueOf((Class<Enum>)type,value);

这会将字符串转换为类型的Enum类的枚举常量

编辑:现在我有一台电脑方便,我可以看到实际上有什么用.在没有编译器警告的情况下,以下任一情况都正确运行:

Enum<?> convertedValueA = Enum.valueOf(type,value);
Enum<?> convertedValueB = Enum.valueOf(type.asSubclass(Enum.class),value);

第二个调用asSubClass(),它会进行运行时检查以确保该类型是一些枚举类,但是valueOf()方法必须进行检查才能正常工作.

以下给了我一个编译错误:

Enum<?> convertedValueC = Enum.valueOf((Class<? extends Enum <?>>)type,value);

java: Foo.java:22: <T>valueOf(java.lang.Class<T>,java.lang.String) in java.lang.Enum cannot be applied to (java.lang.Class<capture#134 of ? extends java.lang.Enum<?>>,java.lang.String)

投射到通配符类型的复杂性使我感到困惑所以我可能尝试过错误的演员.此外,它没有运行时效果这一事实意味着它很容易弄错,永远不会发现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读