使用枚举作为Map中的键的java.lang.ClassNotFoundException错误

时间:2013-10-26 00:56:48

标签: java spring enums

<util:map id="myMap" key-type="com.myClass.Foo.myEnum" value-type="com.myClass.Foo">
    <entry>
        <key>
            <value type="com.myClass.Foo.myEnum">ONE</value>
        </key>
        <ref bean="myObj"/>
    </entry>
</util:map>

爪哇:

package com.myClass
public class Foo {
    public enum myEnum {ONE, TWO;}
}

我正在尝试从Spring 2.5创建一个地图。

Map<myEnum, Foo> myMap;

我正在

nested exception is java.lang.ClassNotFoundException:com.myClass.Foo.myEnum

com.myClass.Foo.myEnum我肯定有com.myClass.Foo我不知道为什么会收到java.lang.ClassNotFoundException

1 个答案:

答案 0 :(得分:2)

您的枚举类'完全限定名称是

com.myClass.Foo$myEnum

不是

com.myClass.Foo.myEnum

切换它,它会工作。 Spring使用反射,使用Class.forName()来获取类的Class对象并实例化一个对象。 forName()需要一个完全限定的名称。阅读this以了解您的班级名称包含$

的原因

请注意,在较新版本的Spring中,有一个catch块捕获ClassNotFoundException并在用{{1}替换最后一个forName后再次尝试. }。