2016-05-01 60 views
0

我有一個EnumJava當擴展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枚舉類隱式繼承),並調用TypeOfUservalueOf()方法:

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-elseswitch指令,如:

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

因爲他們可以很麻煩,維護時將在項目中存在許多Enum秒。有沒有機會在Java?預先感謝您的任何幫助。

+0

你想要達到什麼目的?爲什麼所有這些反射代碼? –

+0

@JBNizet因爲我想寫'QueryRestriction'類,在那裏我可以放置分頁,過濾,排序等,然後調用方法像'build()',它返回給我一個Criteria。我認爲它應該儘可能通用,因爲它應該適用於可以是'Long','String','Enum'等的字段,或者甚至是真正的類,例如具有'Place'的Meeting'。也許我錯了:)但我認爲它需要通用代碼。附: 'Enum.valueOf(fieldClass,key)'正在完成這項工作。 –

回答

1

您正在尋找Enum.valueOf

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

謝謝,作品像魅力:) –

1

Enum.valueOf(fieldClass, key)應該在我看來工作。

相關問題