0
public class Foo {
   public enum myEnum {ONE, TWO};
}

public class Var {

}

public class Dummy {
    Map<myEnum, Var> myMap = null
}

我的xml文件

<bean id="enumOne" class="com.myClass.Foo.myEnum" factory-method="valueOf">
    <constructor-arg>
        <value>One</value>
    </constructor-arg>
</bean>

我收到一条错误消息:

java.lang.ClassNotFoundException, com.myClass.Foo.myEnum

如何使用 Spring 框架 2.5 设置带有枚举键的映射?

4

1 回答 1

0

正如我在你的另一个问题中解释的那样,嵌套的正确限定类名enum

Foo$myEnum

显然附加到它所在的任何包中,可能

com.myClass.Foo$myEnum

请注意,java 命名约定规定包名称应为小写,类型名称(接口、类或枚举)应以大写字符开头。

此外,您的枚举常量已命名ONE,因此您可以使用valueOf. 例如

myEnum.valueOf("ONE");

因此,您的bean声明变为

<bean id="enumOne" class="com.myClass.Foo$myEnum" factory-method="valueOf">
    <constructor-arg>
        <value>ONE</value>
    </constructor-arg>
</bean>

至于地图,请使用util:map正确的限定类名(将您更改String为您想要使用的任何类型)

<util:map id="aMap" map-class="java.util.HashMap" key-type="com.myClass.Foo$myEnum" value-type="java.lang.String">
    <entry>
        <key>
            <ref bean="enumOne"/>
        </key>
        <value>
            Hello World
        </value>
    </entry>
</util:map>
于 2013-10-26T04:12:19.810 回答