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

时间:2016-05-01 13:56:45

标签: java hibernate class enums hibernate-criteria

我在Enum中有一个Java

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类)并调用valueOf()方法{ {1}}:

TypeOfUser

但它的作用只是因为我的项目只有一个Enum,并且将来会有更多的项目,比如Class fieldClass = element.getValue().getValue(); if (Enum.class.isAssignableFrom(fieldClass)) { criteria.add( Restrictions.eq(element.getKey(), TypeOfUser.valueOf(element.getValue().getKey())) ); } 左右。当检测到类为Months时,是否有一种方法可以将其强制转换为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-else指令,例如:

switch

因为当项目中存在许多if (fieldClass.equals(TypeOfUser.class)) { value = TypeOfUser.valueOf(key); } else if (fieldClass.equals(Months.class)) { value = Months.valueOf(key); } 时,维护它们真的很棘手。有没有机会在Enum中这样做?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您正在寻找Enum.valueOf

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

答案 1 :(得分:1)

在我看来,

Enum.valueOf(fieldClass, key)应该有用。