diff --git a/spring-beans/src/main/java/org/springframework/beans/PropertyBatchUpdateException.java b/spring-beans/src/main/java/org/springframework/beans/PropertyBatchUpdateException.java index 65f9b02da47..c3ae8c1847c 100644 --- a/spring-beans/src/main/java/org/springframework/beans/PropertyBatchUpdateException.java +++ b/spring-beans/src/main/java/org/springframework/beans/PropertyBatchUpdateException.java @@ -18,6 +18,7 @@ package org.springframework.beans; import java.io.PrintStream; import java.io.PrintWriter; +import java.util.StringJoiner; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -85,12 +86,9 @@ public class PropertyBatchUpdateException extends BeansException { @Override public String getMessage() { - StringBuilder sb = new StringBuilder("Failed properties: "); - for (int i = 0; i < this.propertyAccessExceptions.length; i++) { - sb.append(this.propertyAccessExceptions[i].getMessage()); - if (i < this.propertyAccessExceptions.length - 1) { - sb.append("; "); - } + StringJoiner sb = new StringJoiner("; ", "Failed properties: ", ""); + for (PropertyAccessException exception : this.propertyAccessExceptions) { + sb.add(exception.getMessage()); } return sb.toString(); } 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 94b300bbcc0..279c1ee10ab 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.IdentityHashMap; import java.util.Map; +import java.util.StringJoiner; import org.springframework.core.SerializableTypeWrapper.FieldTypeProvider; import org.springframework.core.SerializableTypeWrapper.MethodParameterTypeProvider; @@ -1518,18 +1519,15 @@ public class ResolvableType implements Serializable { @Override public String getTypeName() { - StringBuilder result = new StringBuilder(this.rawType.getTypeName()); + String typeName = this.rawType.getTypeName(); if (this.typeArguments.length > 0) { - result.append('<'); - for (int i = 0; i < this.typeArguments.length; i++) { - if (i > 0) { - result.append(", "); - } - result.append(this.typeArguments[i].getTypeName()); + StringJoiner result = new StringJoiner(", ", "<", ">"); + for (Type argument : this.typeArguments) { + result.add(argument.getTypeName()); } - result.append('>'); + return typeName + result.toString(); } - return result.toString(); + return typeName; } @Override 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 91cd74ac3a1..5ee9fd66b74 100644 --- a/spring-core/src/main/java/org/springframework/util/ClassUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ClassUtils.java @@ -911,14 +911,10 @@ public abstract class ClassUtils { } Class clazz = value.getClass(); if (Proxy.isProxyClass(clazz)) { - StringBuilder result = new StringBuilder(clazz.getName()); - result.append(" implementing "); - Class[] ifcs = clazz.getInterfaces(); - for (int i = 0; i < ifcs.length; i++) { - result.append(ifcs[i].getName()); - if (i < ifcs.length - 1) { - result.append(','); - } + String prefix = clazz.getName() + " implementing "; + StringJoiner result = new StringJoiner(",", prefix, ""); + for (Class ifc : clazz.getInterfaces()) { + result.add(ifc.getName()); } return result.toString(); } diff --git a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java index d3a5a5d0d76..4638a4a7c3a 100644 --- a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java +++ b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java @@ -21,6 +21,7 @@ import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.StringJoiner; import org.springframework.http.server.PathContainer; import org.springframework.http.server.PathContainer.Element; @@ -465,13 +466,13 @@ public class PathPattern implements Comparable { } String toChainString() { - StringBuilder buf = new StringBuilder(); + StringJoiner buf = new StringJoiner(" "); PathElement pe = this.head; while (pe != null) { - buf.append(pe.toString()).append(" "); + buf.add(pe.toString()); pe = pe.next; } - return buf.toString().trim(); + return buf.toString(); } /**