从类中获取枚举实例<?使用字符串值扩展枚举>?

2022-09-01 14:01:19

我发现很难用语言表达确切的问题,所以我只举一个例子。

我有两种类型:Enum

enum Shape {
    CAT, DOG;
}

enum Color {
    BLUE, RED;
}

我有一个方法:

public Object getInstance(String value, Class<?> type);

我想使用如下方法:

// someValue is probably "RED", and someEnumClass is probably Color.class
Color c = getInstance(someValue, someEnumClass);

我一直无法确定如何实现.一旦知道要实例化的确切类,就很容易了:getInstance()Enum

Color.valueOf("RED");

但是,如何用未知数来完成上述行呢?(但是,众所周知,是 的子类。ClasssomeEnumClassEnum

谢谢!


答案 1
 public static <T extends Enum<T>> T getInstance(final String value, final Class<T> enumClass) {
     return Enum.valueOf(enumClass, value);
 }

该方法将用作:

final Shape shape = getInstance("CAT", Shape.class);

话又说回来,你总是可以使用

final Shape shape = Shape.valueOf("CAT");

这是一个捷径

Enum.valueOf(Shape.class, "CAT");

答案 2

我们想要得到反映传入方法的对象,它接受一个参数;然后它没有对象(因为它是静态的)和提供的字符串参数:MethodvalueOfClassStringinvoke

type.getDeclaredMethod("valueOf", String.class).invoke(null, value);

您将需要捕获一船不同类型的异常。