我在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
中这样做?提前感谢您的帮助。
答案 0 :(得分:1)
您正在寻找Enum.valueOf
Class<E> enumClass = ...
String name = ...
E e = Enum.valueOf(enumClass, name);
答案 1 :(得分:1)
Enum.valueOf(fieldClass, key)
应该有用。