Das vorliegende Thema erläutert, wie der toString()-Generator den Inhalt von Arrays (Bereichen) auflistet und die Anzahl der in Collection
und Map
aufgelisteten Elemente begrenzt. Die jeweils verwendete Methode hängt nicht nur vom Membertyp ab, sondern auch von der ausgewählten JDK-Kompatibilität des Projekts.
Arrays.toString()
. Da diese Methode in JDK 1.4 nicht verfügbar ist, wird in diesem Fall stattdessen Arrays.asList()
verwendet, jedoch nur für nicht primitive Arrays. Primitive Arrays werden mit einer Helpermethode wie unten dargestellt verarbeitet.Arrays.asList()
mit List.subList()
. Im folgenden Beispiel sieht der generierte Code für ein Member mit dem Namen 'anArray' wie folgt aus: Arrays.asList(anArray).subList(0, Math.min(anArray.length, maxLen))
Arrays.asList()
jedoch nicht möglich. Dementsprechend wird in JDK 1.5 und niedriger eine Helpermethode verwendet. Bei JDK 1.6 gibt es eine andere Lösung, nämlich Arrays.toString(Arrays.copyOf(anArray, Math.min(anArray.length, maxLen))
. Auch wenn das Kopieren eines Arrays keine optimale Lösung darstellt, so ist der kopierte Teil in der Regel nicht umfangreich und die Effizienz wird hierdurch nicht beeinträchtigt. Der Vorteil ist, dass die Verwendung einer Helpermethode vermieden werden kann.[1, 2, 3]
zurück. Die Methode iteriert über den Bereich und ermittelt mit instanceof
seinen einschließenden (übergeordneten) Typ. Damit der Code kurz gehalten wird, führt sie nur eine Überprüfung auf solche Typen aus, die auch tatsächlich an sie übergeben werden können.
private String arrayToString(Object array, int len, int maxLen) { StringBuffer stringBuffer = new StringBuffer(); len = Math.min(len, maxLen); stringBuffer.append("["); for (int i = 0; i < len; i++) { if (i > 0) stringBuffer.append(", "); if (array instanceof float[]) stringBuffer.append(((float[]) array)[i]); if (array instanceof int[]) stringBuffer.append(((int[]) array)[i]); if (array instanceof Object[]) stringBuffer.append(((Object[]) array)[i]); } stringBuffer.append("]"); return stringBuffer.toString(); }HINWEISE:
maxLen
und verwendet nicht Math.min()
.List
Für alle JDK-Versionen wird dieselbe Lösung verwendet, nämlich folgende: aList.subList(0, Math.min(aList.size(), maxLen))
Collection
(Helpermethode)Collection
kann nicht in List
umgewandelt werden, ohne dass der betreffende
Inhalt kopiert wird (vorausgesetzt, dass es nicht bereits ein Element List
ist). Daher wird eine Helpermethode verwendet,
die über die ersten maxLen
-Elemente iteriert und eine Zeichenfolge aus ihnen aufgebaut:
private String toString(Collection collection, int maxLen) { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("["); int i = 0; for (Iterator iterator = collection.iterator(); iterator.hasNext() && i < maxLen; i++) { if (i > 0) stringBuffer.append(", "); stringBuffer.append(iterator.next()); } stringBuffer.append("]"); return stringBuffer.toString(); }HINWEISE:
Map
Bei Map
wird dieselbe Helpermethode wie bei Collection
verwendet, jedoch mit dem Unterschied, dass map.entrySet()
übergeben wird.
Diese Tabelle enthält eine Zusammenfassung der Methoden und ihrer Verwendung unter verschiedenen Bedingungen:
java.util.List |
java.util.Collection |
java.util.Map |
Array primitiven Typs | Array nicht primitiven Typs | |
---|---|---|---|---|---|
JDK 1.4 | - | - | - | Helpermethode arrayToString(array, len) |
Arrays.asList(array) |
JDK 1.4/1.5, Begrenzung von Elementen | member.subList() |
Helpermethode toSting(collection, maxLen) |
Helpermethode toString(collection, maxLen) mit map.entrySet() |
Helpermethode arrayToString(array, len, maxLen) |
Arrays.asList(array).subList() |
JDK 1.5 | - | - | - | Arrays.toString() |
Arrays.asList(array) |
JDK 1.6 | - | - | - | Arrays.toString() |
Arrays.toString() |
JDK 1.6, Begrenzung von Elementen | member.subList() |
HelpermethodetoString(Collection) |
Helpermethode toString(Collection) mit map.entrySet() |
Arrays.toString(Arrays.copyOf(member, ...)) |
Arrays.asList(array).subList() |
List
in der Regel mit der Methode subList()
verarbeitet, doch wenn ein anderes Member des Typs Collection
(nicht List
) vorhanden ist, werden beim Generieren von toString(collection) auch List
-Elemente an es übergeben. Auf diese Weise ist der Code kürzer und weist eine höhere Konsistenz auf.array != null ? Arrays.asList(array) : null
"[]"
).
Dialog 'toString() generieren'
toString()-Generator: Formatschablonen
toString()-Generator: Codedarstellungen