Die Codedarstellung bestimmt, wie die generierte Methode funktioniert und welche Klassen sie verwendet. Es sind mehrere Codedarstellungen im Kombinationsfeld des Generatordialogs verfügbar:
return "FooClass [aFloat=" + aFloat + ", aString=" + aString + ", anInt=" + anInt + ", anObject=" + anObject + "]";Wenn die Option "Nullwerte überspringen" aktiviert ist, ist der Code etwas schwieriger zu lesen:
return "FooClass [aFloat=" + aFloat + ", " + (aString != null ? "aString=" + aString + ", " : "") + "anInt=" + anInt + ", " + (anObject != null ? "anObject=" + anObject : "") + "]";
StringBuilder builder = new StringBuilder(); builder.append("FooClass [aFloat="); builder.append(aFloat); builder.append(", aString="); builder.append(aString); builder.append(", anInt="); builder.append(anInt); builder.append(", anObject="); builder.append(anObject); builder.append("]"); return builder.toString();Die Option Nullwerte überspringen macht den Code nicht dermaßen unkenntlich wie zuvor:
StringBuilder builder = new StringBuilder(); builder.append("FooClass [aFloat="); builder.append(aFloat); builder.append(", "); if (aString != null) { builder.append("aString="); builder.append(aString); builder.append(", "); } builder.append("anInt="); builder.append(anInt); builder.append(", "); if (anObject != null) { builder.append("anObject="); builder.append(anObject); } builder.append("]"); return builder.toString();
StringBuilder builder = new StringBuilder(); builder.append("FooClass [aFloat=").append(aFloat).append(", aString=").append(aString) .append(", anInt=").append(anInt).append(", anObject=").append(anObject).append("]"); return builder.toString();Wenn die Option Nullwerte überspringen aktiviert ist, muss die Kette unterbrochen werden:
StringBuilder builder = new StringBuilder(); builder.append("FooClass [aFloat=").append(aFloat).append(", "); if (aString != null) { builder.append("aString=").append(aString).append(", "); } builder.append("anInt=").append(anInt).append(", "); if (anObject != null) { builder.append("anObject=").append(anObject); } builder.append("]"); return builder.toString();
return String.format("FooClass [aFloat=%s, aString=%s, anInt=%s, anObject=%s]", aFloat, aString, anInt, anObject);Da
String.format()
in JDK 1.4 und früher nicht existiert, wird stattdessen MessageFormat.format()
verwendet:
return MessageFormat.format("FooClass [aFloat={0}, aString={1}, anInt={2}, anObject={3}]", new Object[] { new Float(aFloat), aString, new Integer(anInt), anObject });
Diese Darstellung verwendet eine externe Klasse zum Builden einer Ergebniszeichenfolge. Sie kann Klassen verwenden, die die folgenden Bedingungen erfüllen:
Object
als Parameter. Es wird ein Objekt übergeben , für das die Methode 'toString()' aufgerufen wird.Object
und (optional) ein Element String
(in beliebiger Reihenfolge) verwenden.String
(Zeichenfolge) zurückgibt.Für den angepassten Builder sind zusätzliche Konfigurationsschritte erforderlich, um ordnungsgemäß zu funktionieren. Sämtliche erforderlichen Optionen können über ein Dialogfenster eingegeben werden, das nach dem Klicken auf die Schaltfläche 'Konfigurieren...' angezeigt wird. Es handelt sich um die folgenden Optionen:
String
lauten muss) denjenigen Methoden vorgezogen, die ein einzelnes Argument verwendet. (Darüber hinaus soll das Argument String
vorzugsweise das erste Argument sein.) Wenn Versionen der Methode vorhanden sind, die spezielle Argumenttypen verwenden, werden diese nach Möglichkeit ebenfalls verwendet.Nehmen Sie zum Beispiel an, dass Ihre Builderklasse wie folgt aussieht:
package org.foo.ToStringBuilder2; public class ToStringBuilder2 { public ToStringBuilder2(Object o) {...} public ToStringBuilder2 appendItem(String s, Object o) {...} public ToStringBuilder2 appendItem(String s, float f) {...} public String getString() {...} }
Natürlich sollte in diesem Fall für die Builderklasse der Wert "org.foo.ToStringBuilder2"
festgelegt werden. Die Builderkennung kann zum Beispiel "builder"
lauten, die Methode anhängen ('append'-Methode) ist "appendItem"
und als Ergebnismethode ist "getString"
angegeben. Mit der aktivierten Option Kettenaufrufe sieht die generierte Methode wie folgt aus:
ToStringBuilder2 builder = new ToStringBuilder2(this); builder.append("aFloat", aFloat).append("aString", aString).append("anInt", new Integer(anInt)) .append("anObject", anObject); return builder.getString();
Beachten Sie, dass eine primitive Variable anInt
an den Builder mit Wrappertyp übergeben wurde. Dies erfolgt bei Projekten, die JDK 1.4 und früher verwenden. (Bei späteren JDKs führt der Compiler dies automatisch aus.) Bei aFloat
befand sich eine spezielle Methode in der Builderklasse, sodass keine Umhüllung (Wrapping) erforderlich war.
Dialog 'toString() generieren'
toString()-Generator: Formatschablonen
toString()-Generator: Inhaltsauflistung