当 class 在扩展 Enum 时被检测到,如何调用它的 valueOf() 方法?

When class is detected as it extends Enum, how to call its valueOf() method?

我在 Java 中有一个 Enum:

public enum TypeOfUser {
    EMPLOYEE("EMPLOYEE"),
    EMPLOYER("EMPLOYER");

    private final String type;
    TypeOfUser(final String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }
}

我在 Hibernate 映射中使用它,所以如果我想添加过滤,我使用 Criteria 接口。我基于 Map 构建标准,此时我检测它是否继承自 Enum(因为每个 Enum 隐式继承自 Java Enum class)并调用valueOf() TypeOfUser 的方法:

Class fieldClass = element.getValue().getValue();
if (Enum.class.isAssignableFrom(fieldClass)) {
     criteria.add(
         Restrictions.eq(element.getKey(), 
         TypeOfUser.valueOf(element.getValue().getKey()))
      );
}

但它之所以有效,是因为我的项目中只有一个 Enum,将来会有更多,例如 Months 左右。有没有办法,当 class 被检测为 Enum 时,转换它然后调用它的 valueOf() 方法?类似于:

Class fieldClass = element.getValue().getValue();
if (Enum.class.isAssignableFrom(fieldClass)) {
     criteria.add(
         Restrictions.eq(element.getKey(),
         ((Enum.class)fieldClass).valueOf(element.getValue().getKey()))
      );
 }

我想这样做以避免 if-elseswitch 指令,例如:

if (fieldClass.equals(TypeOfUser.class)) {
    value = TypeOfUser.valueOf(key);
}
else if (fieldClass.equals(Months.class)) {
    value = Months.valueOf(key);
}

因为当项目中存在许多 Enum 时,维护它们真的很棘手。 Java有机会做吗?提前感谢您的帮助。

您正在寻找Enum.valueOf

Class<E> enumClass = ...
String name = ...
E e = Enum.valueOf(enumClass, name);

Enum.valueOf(fieldClass, key) 在我看来应该可行。