2011-12-20 14 views
7

Próbowałem zdefiniować EnumMap na wiosnę przy użyciu. Próbowałem następujące wariantyJak zdefiniować EnumMap na wiosnę 3.0

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

otrzymuję następujący błąd

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

się następującą definicję tego, co próbowałem początkowo

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

i to dało mi jakiś błąd nie jest w stanie przypisz enumtype do String.

Na stronie znajdują się przykłady korzystania z ogólnej mapy, ale próbuję sprawdzić, czy mogę użyć EnumMap, ponieważ jest ona uważana za najbardziej optymalną dla Enums. Odpowiedź może być bardzo oczywista, więc przepraszam, jeśli pytanie jest głupie. Jest to prawdopodobnie spowodowane moją ograniczoną znajomością wiosny. Dzięki

Odpowiedz

12

Domyślam się, że nie można zainicjować EnumMap z <util:map>. Jednak EnumMap ma konstruktora, że ​​trwa istniejący Map, można spróbować go użyć:

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

Dzięki temu zadziałało dla mnie. – Seagull

0

Ten problem jest fakt, że nie ma EnumMap domyślnego konstruktora bez argumentów. Sprężyna zostanie zainicjowana bez żadnego argumentu, jeśli nie istnieje błąd.