我有一個Enum
在Java
:當擴展Enum時檢測到類時,如何調用它的valueOf()方法?
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枚舉類隱式繼承),並調用TypeOfUser
valueOf()
方法:
Class fieldClass = element.getValue().getValue();
if (Enum.class.isAssignableFrom(fieldClass)) {
criteria.add(
Restrictions.eq(element.getKey(),
TypeOfUser.valueOf(element.getValue().getKey()))
);
}
但它的作品只是因爲我只有一個Enum在我的項目中,將來會有更多的,比如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
秒。有沒有機會在Java
?預先感謝您的任何幫助。
你想要達到什麼目的?爲什麼所有這些反射代碼? –
@JBNizet因爲我想寫'QueryRestriction'類,在那裏我可以放置分頁,過濾,排序等,然後調用方法像'build()',它返回給我一個Criteria。我認爲它應該儘可能通用,因爲它應該適用於可以是'Long','String','Enum'等的字段,或者甚至是真正的類,例如具有'Place'的Meeting'。也許我錯了:)但我認爲它需要通用代碼。附: 'Enum.valueOf(fieldClass,key)'正在完成這項工作。 –