diff --git a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java index e4b445751c..11be228b43 100644 --- a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java +++ b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java @@ -149,7 +149,7 @@ class TypeConverterDelegate { convertedValue = StringUtils.commaDelimitedListToStringArray(text); } if (editor == null && String.class != elementType) { - editor = findDefaultEditor(Array.newInstance(elementType, 0).getClass()); + editor = findDefaultEditor(elementType.arrayType()); } } } diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index 2b6b96ce5c..7c0e4395fb 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -1373,8 +1373,8 @@ public class ResolvableType implements Serializable { */ public static ResolvableType forArrayComponent(ResolvableType componentType) { Assert.notNull(componentType, "Component type must not be null"); - Class arrayClass = Array.newInstance(componentType.resolve(), 0).getClass(); - return new ResolvableType(arrayClass, componentType, null, null); + Class arrayType = componentType.resolve().arrayType(); + return new ResolvableType(arrayType, componentType, null, null); } /** diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AbstractMergedAnnotation.java b/spring-core/src/main/java/org/springframework/core/annotation/AbstractMergedAnnotation.java index 63c7b05a7a..779c763f39 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AbstractMergedAnnotation.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AbstractMergedAnnotation.java @@ -17,7 +17,6 @@ package org.springframework.core.annotation; import java.lang.annotation.Annotation; -import java.lang.reflect.Array; import java.util.NoSuchElementException; import java.util.Optional; import java.util.function.Predicate; @@ -164,8 +163,7 @@ abstract class AbstractMergedAnnotation implements MergedA @SuppressWarnings("unchecked") public > E[] getEnumArray(String attributeName, Class type) { Assert.notNull(type, "Type must not be null"); - Class arrayType = Array.newInstance(type, 0).getClass(); - return (E[]) getRequiredAttributeValue(attributeName, arrayType); + return (E[]) getRequiredAttributeValue(attributeName, type.arrayType()); } @Override diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java index febfc54a6f..5ec7276ca8 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java @@ -327,8 +327,7 @@ public class AnnotationAttributes extends LinkedHashMap { */ @SuppressWarnings("unchecked") public A[] getAnnotationArray(String attributeName, Class annotationType) { - Object array = Array.newInstance(annotationType, 0); - return (A[]) getRequiredAttribute(attributeName, array.getClass()); + return (A[]) getRequiredAttribute(attributeName, annotationType.arrayType()); } /** diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index b12cbdb641..8b305589bb 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -16,7 +16,6 @@ package org.springframework.core.convert.support; -import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collections; import java.util.Deque; @@ -584,7 +583,7 @@ public class GenericConversionService implements ConfigurableConversionService { List> hierarchy, Set> visited) { if (asArray) { - type = Array.newInstance(type, 0).getClass(); + type = type.arrayType(); } if (visited.add(type)) { hierarchy.add(index, type); diff --git a/spring-core/src/main/java/org/springframework/util/ClassUtils.java b/spring-core/src/main/java/org/springframework/util/ClassUtils.java index 8850d9cf06..0b37101f42 100644 --- a/spring-core/src/main/java/org/springframework/util/ClassUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ClassUtils.java @@ -20,7 +20,6 @@ import java.io.Closeable; import java.io.Externalizable; import java.io.File; import java.io.Serializable; -import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -273,21 +272,21 @@ public abstract class ClassUtils { if (name.endsWith(ARRAY_SUFFIX)) { String elementClassName = name.substring(0, name.length() - ARRAY_SUFFIX.length()); Class elementClass = forName(elementClassName, classLoader); - return Array.newInstance(elementClass, 0).getClass(); + return elementClass.arrayType(); } // "[Ljava.lang.String;" style arrays if (name.startsWith(NON_PRIMITIVE_ARRAY_PREFIX) && name.endsWith(";")) { String elementName = name.substring(NON_PRIMITIVE_ARRAY_PREFIX.length(), name.length() - 1); Class elementClass = forName(elementName, classLoader); - return Array.newInstance(elementClass, 0).getClass(); + return elementClass.arrayType(); } // "[[I" or "[[Ljava.lang.String;" style arrays if (name.startsWith(INTERNAL_ARRAY_PREFIX)) { String elementName = name.substring(INTERNAL_ARRAY_PREFIX.length()); Class elementClass = forName(elementName, classLoader); - return Array.newInstance(elementClass, 0).getClass(); + return elementClass.arrayType(); } ClassLoader clToUse = classLoader;