diff --git a/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java b/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java index 78ba2283b9e6..f0d3f06d4b03 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java +++ b/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java @@ -22,7 +22,6 @@ import java.lang.reflect.Type; import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; import java.util.stream.Stream; @@ -36,6 +35,7 @@ import org.springframework.lang.Contract; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; +import org.springframework.util.CollectionUtils; /** * Contextual descriptor about a type to convert from or to. @@ -55,7 +55,7 @@ @SuppressWarnings("serial") public class TypeDescriptor implements Serializable { - private static final Map, TypeDescriptor> commonTypesCache = new HashMap<>(32); + private static final Map, TypeDescriptor> commonTypesCache; private static final Class[] CACHED_COMMON_TYPES = { boolean.class, Boolean.class, byte.class, Byte.class, char.class, Character.class, @@ -63,9 +63,11 @@ public class TypeDescriptor implements Serializable { long.class, Long.class, short.class, Short.class, String.class, Object.class}; static { + Map, TypeDescriptor> commonTypes = CollectionUtils.newHashMap(CACHED_COMMON_TYPES.length); for (Class preCachedClass : CACHED_COMMON_TYPES) { - commonTypesCache.put(preCachedClass, valueOf(preCachedClass)); + commonTypes.put(preCachedClass, new TypeDescriptor(ResolvableType.forClass(preCachedClass), null, null)); } + commonTypesCache = Map.copyOf(commonTypes); }