如何在Spring 3.0中定义EnumMap

时间:2011-12-20 20:04:38

标签: spring

我一直在尝试使用Spring定义一个EnumMap。我尝试了以下变化

<util:map map-class="java.util.EnumMap" key-type="xyz.EnumType">
<entry key="SOME_ENUM_TYPE">
   <ref bean="someBean"/>
</entry>
</util:map>

我收到以下错误

Error creating bean with name 'util:map#1c599b0e': Invocation of init method failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.EnumMap]: No default constructor found; nested exception is java.lang.NoSuchMethodException: java.util.EnumMap.<init>()

以下定义是我最初尝试的

<util:map map-class="java.util.EnumMap">
<entry key="SOME_ENUM_TYPE">
   <ref bean="someBean"/>
</entry>
</util:map>

这给了我一些错误,即无法将enumtype分配给String。

网站上有一些使用通用地图的例子,但我试图看看我是否可以使用EnumMap,因为它被认为是Enums的最佳选择。答案可能非常明显,所以如果问题很愚蠢我会道歉。这可能是由于我对Spring的了解有限。感谢

2 个答案:

答案 0 :(得分:13)

我猜您无法使用EnumMap初始化<util:map>。但是,EnumMap有一个构建函数,它使用现有的Map,您可以尝试使用它:

<bean class = "java.util.EnumMap">
    <constructor-arg>
        <util:map key-type="xyz.EnumType">
            <entry key="SOME_ENUM_TYPE"><ref bean="someBean"/></entry>
        </util:map> 
    </constructor-arg>
</bean>

答案 1 :(得分:0)

这个问题是因为EnumMap没有没有参数的默认构造函数。 Spring将不带参数初始化,如果不存在将是错误。