2011-01-25 10 views
5

Podczas wywoływania funkcji sprawdzania poprawności Springa w aplikacji Eclipse, otrzymuję wiele błędów, gdy chcę odzyskać wyliczenie przy użyciu domyślnej metody enum o wartości "valueOf".Wiosna, fasola i wartość enumOf

Na przykład:

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

został Eclipse mówi mi:

Non-statyczne metody fabryki 'valueOf' z 1 argumenty nie występujące w fabrycznym klasy fasoli ...

Jednak jak rozumiem to z dokumentacji:

BeanWrapperImpl obsługuje JDK 1.5 teksty stałe i klasy enum old-style: String wartości będą traktowane jako wartość enum nazwy

Zatem powyższe powinien działać dobrze? (btw jest "konstruktor-arg" poprawny znacznik w takim przypadku, czy nie powinien to być jakiś "metoda-arg"?).

Dlaczego funkcja sprawdzania poprawności Eclipse/Spring daje mi ten komunikat o błędzie?

Odpowiedz

4

Enum.valueOf() ma dwa argumenty:

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

Dlatego pożądane definicja może wyglądać następująco:

<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> 

Jednak coś w tym może być bardziej eleganckie rozwiązanie:

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

Zgadzam się, ale OP nie próbuje użyć 'java.lang.Enum.valueOf()'. Raczej rozumiem, że jest to 'DocFamily.valueOf()', które próbuje się wywołać. –

+1

@Grzegorz Oledzki: ale DocFamily jest Enum – Gugussee

0

Po prostu próbowałem używać tego w ten sposób:

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

i działało jak czar. Czy to działa dla Ciebie?

Powiązane problemy