Весна, бобы и перечисление - PullRequest
5 голосов
/ 25 января 2011

При вызове Spring в Validate из Eclipse я получаю много ошибок, когда хочу вернуть перечисление, используя неявный метод valueOf Enum.

Например:

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

Eclipse сообщает мне:

Нестатический фабричный метод 'valueOf' с 1 аргументом не найден в классе фабричного компонента ...

Однако, как я понимаю из документации:

BeanWrapperImpl поддерживает перечисления JDK 1.5 и классы перечислений старого стиля: строковые значения будут обрабатываться как имена значений перечислений

Итаквышесказанное должно работать правильно?(Кстати, в этом случае «constructor-arg» - правильный тег, разве это не должен быть «method-arg»?).

Почему Eclipse / Spring "Validate" выдает мне это сообщение об ошибке?

Ответы [ 2 ]

4 голосов
/ 25 января 2011

Enum.valueOf() имеет два аргумента:

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

Поэтому желаемое определение может выглядеть так:

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

Однако что-то подобное может быть более элегантным решением:

<util:constant id = "docFamily" static-field = "...DocFamily.LOGY" />
0 голосов
/ 14 июня 2011

Я просто попытался использовать это так:

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

, и это сработало как шарм.У тебя это работает?

...