--- old/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java 2016-07-15 09:57:19.269929200 -0700 +++ new/src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl.java 2016-07-15 09:57:19.153871196 -0700 @@ -33,6 +33,7 @@ import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.Arrays; +import java.util.StringJoiner; import java.util.Objects; /** Implementing class for ParameterizedType interface. */ @@ -207,10 +208,7 @@ StringBuilder sb = new StringBuilder(); if (ownerType != null) { - if (ownerType instanceof Class) - sb.append(((Class)ownerType).getName()); - else - sb.append(ownerType.toString()); + sb.append(ownerType.getTypeName()); sb.append("."); @@ -224,17 +222,13 @@ } else sb.append(rawType.getName()); - if (actualTypeArguments != null && - actualTypeArguments.length > 0) { - sb.append("<"); - boolean first = true; + if (actualTypeArguments != null) { + StringJoiner sj = new StringJoiner(", ", "<", ">"); + sj.setEmptyValue(""); for(Type t: actualTypeArguments) { - if (!first) - sb.append(", "); - sb.append(t.getTypeName()); - first = false; + sj.add(t.getTypeName()); } - sb.append(">"); + sb.append(sj.toString()); } return sb.toString();