当 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-else
或 switch
指令,例如:
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)
在我看来应该可行。
我在 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-else
或 switch
指令,例如:
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)
在我看来应该可行。