2011-01-25 15 views
5

Quando si chiama "Validate" di Spring da Eclipse, ottengo molti errori quando voglio recuperare un enum utilizzando il metodo "valueOf" implicito di Enum.Spring, beans and enum's valueOf

Ad esempio:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf"> 
    <constructor-arg> 
     <value>LOGY</value> 
    </constructor-arg> 
</bean> 

ha Eclipse dicendomi:

non statico metodo factory 'valueOf' con 1 argomenti non presenti in fabbrica classe bean ...

Tuttavia, come ho capito dalla documentazione:

BeanWrapperImpl supporta JDK 1.5 enumerazioni e Enumera classi vecchio stile: String valori verranno considerati come valore enum nomi

Quindi il comando precedente dovrebbe funzionare bene? (btw è 'constructor-arg' il tag corretto in quel caso, non dovrebbe essere un 'metodo-arg'?).

Perché "Validate" di Eclipse/Spring mi dà questo messaggio di errore?

risposta

4

Enum.valueOf() ha due argomenti:

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 

Pertanto la definizione desiderato può apparire come segue:

<bean id="docFamily" class="java.lang.Enum" factory-method="valueOf"> 
    <constructor-arg index = "0"><value>...DocFamily</value></constructor-arg> 
    <constructor-arg index = "1"><value>LOGY</value></constructor-arg> 
</bean> 

Tuttavia, qualcosa di simile a questo può essere una soluzione più elegante:

<util:constant id = "docFamily" static-field = "...DocFamily.LOGY" /> 
+0

Sono d'accordo, ma OP non sta cercando di usare 'java.lang.Enum.valueOf()'. Piuttosto capisco che è 'DocFamily.valueOf()' che viene provato a essere chiamato. –

+1

@Grzegorz Oledzki: ma DocFamily è un Enum – Gugussee

0

Ho appena provato ad usarlo in questo modo:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf"> 
    <constructor-arg type="java.lang.String" value="LOGY"/> 
</bean> 

e ha funzionato come fascino. Funziona per te?