Spring,beans和enum的valueOf

时间:2011-01-25 17:35:01

标签: java spring enums javabeans

当从Eclipse调用Spring的“Validate”时,当我想使用Enum的隐式“valueOf”方法返回枚举时,我会遇到很多错误。

例如:

<bean id="docFamily" class="...DocFamily" factory-method="valueOf">
    <constructor-arg>
      <value>LOGY</value>
    </constructor-arg>
</bean>
Eclipse告诉我:

  

非静态工厂方法'valueOf'   在工厂中找不到1个参数   豆类......

但据我从文档中了解到:

  

BeanWrapperImpl支持JDK 1.5枚举   和旧式枚举类:String   值将被视为枚举值   名称

所以上面应该正常吗? (在这种情况下,btw是'constructor-arg'正确的标签,不应该是'method-arg'吗?)。

为什么Eclipse / Spring的“验证”会给我错误信息?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

我只是尝试使用它:

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

它有点像魅力。它适合你吗?