使用 Java Reflection API 在不知道类型的情况下转换枚举



我有2个包,A和B包含相同的类列表。我无法直接使用推土机或任何映射工具,因为 Enum 值在一个包中是大写的,而在另一个包中是驼峰大小写的。我想编写一个通用方法,该方法从包 A 中获取枚举,并使用反射将其转换为包 B 中的枚举。下面是我写的具体代码——

return a.CardType.valueOf(((b.CardType)source).getValue().toUpperCase());

我想编写通用代码进行转换,假设我将源类(枚举类型)作为对象、源类名和目标类名

是你想要的

public class Mango {
    static enum Upper {A,B,C}
    static enum Lower {a,b,c}

    static <SRC extends Enum<SRC>,DST extends Enum<DST>> DST convert(SRC a, Class<DST> classDst ){
        return  Enum.valueOf(   classDst,a.name().toUpperCase());
    }
    public static void main(String[] args) {
        System.out.print(convert(Lower.a,Upper.class));
    }
}

编辑:

所以你想把小写/大写枚举转换为驼峰大小写吗?只需将转换功能修改为:

static <SRC extends Enum<SRC>,DST extends Enum<DST>> DST convert(SRC a, Class<DST> classDst ){
        for (DST dst : EnumSet.allOf(classDst)){
            if (dst.name().equalsIgnoreCase(a.name())){
                return dst;
            }
        }
        throw new IllegalArgumentException("Value not found");
    }

最新更新