Einfache toString() generieren?

Status
Nicht offen für weitere Antworten.

Verjigorm

Top Contributor
Hallo,

ich habe folgendes Problem:

Ich habe einige Datenklassen, die sowas enthalten wie Name, Anschrift und ganz viel sonstige Daten und jeweils Getter/Setter, das wars auch schon.

Nun soll für jeden dieser "Datensätze" die toString()-Methode implementiert werden, die vereinfacht gesagt ALLE Getter aufruft, also alle in der Klasse enthaltenen Infos ausgibt.

Gibt es da irgendwie eine einfache Möglichkeit, das halbwegs zu automatisieren ohne, dass ich das alles händich implementiere?

Es sind nämlich teilweise 60 Felder und von diesen Klassen gibts es ne handvoll.

mfg Verjigorm
 

Ebenius

Top Contributor
Ich mach's manchmal so: Ich kopiere einfach die Deklaration Felder in einen Methoden-Rumpf, lösche die Kommentare (inkl. Javadoc) und ersetze mit regulären Ausdrücken. Dann geht es recht schnell. In etwa:
Code:
@Override
public String toString() {
  return "Whatever {"
  private String field1 = null;
  private final String field2 = "ABC";
  protected String field3;
  int field4 = 7;
  + '}';
}
Der reguläre Ausdruck (so wie ihn Eclipse / java.util.regex.Pattern versteht):
Code:
^(\s*)(?:(?:public|protected|private|final|volatile|static)\s+)*\w+\s+(\w+)(\s*=[^;]*)?;
Der replacement string:
Code:
$1  + "$2 = " + $2 + ", "
Danach sieht die Funktion so aus:
Code:
@Override
public String toString() {
  return "Whatever {"
    + "field1 = " + field1 + ", "
    + "field2 = " + field2 + ", "
    + "field3 = " + field3 + ", "
    + "field4 = " + field4 + ", "
  + '}';
}
Jetzt musst Du nur noch das überflüssige letzte Komma ('+ ", "') entfernen und hast's geschafft.

Nachtrag: Da fällt mir grad auf, dass Du die getter aufrufen willst. Geht natürlich entsprechend. Ich hatte doch richtig verstanden, dass Du die toString()-Methode nicht dynamisch (über Reflection) sondern ausprogrammiert haben wolltest; nur nicht mit so viel Tipperei, oder?

Vielleicht hilft Dir das. Ebenius
 

Verjigorm

Top Contributor
@Ebenius:
Die Idee ist mal kreativ :)
Ja ich will mir möglichst viel Tipperei sparen, vorm posten hab ich an reflection garnicht gedacht.

Die Idee von Hobbit werd ich auchmal genauer in Augenschein nehmen.

Besten Dank schonmal soweit von mir :toll:
 

The_S

Top Contributor
Mal eine Reflection-Methode (inkl. aufbrechen der privaten Member):

Code:
import java.lang.reflect.Field;

public class ToStringBuilder {

	public static String toString(Object obj) {
		
		StringBuilder build = new StringBuilder(obj.getClass().getCanonicalName() + "[");
		
		Field[] fields = obj.getClass().getDeclaredFields();
		Field f;
		for (int i = 0; i < fields.length; i++) {
			f = fields[i];
			if (!f.isAccessible()) {
				f.setAccessible(true);
			} 
			try {
				build.append(f.getName() + "=" + f.get(obj));
				if (i + 1 < fields.length) {
					build.append(", ");
				}
			} 
			catch (IllegalArgumentException e) {
				e.printStackTrace();
			} 
			catch (IllegalAccessException e) {
				e.printStackTrace();
			}
		}
		build.append("]");
		return build.toString();
	}
}

Die Apache Commons werden das wohl ähnlich machen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Einfache Navigations-App schnell selber Programmieren? Bitte um Ideen und Anregungen. Allgemeine Java-Themen 17
J Einfache Sprachsteuerung Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
D RMI Einfache Chat-Anwendung mit RMI Allgemeine Java-Themen 0
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
S Einfache Methode die Groesse eines Objekts zu ermitteln? Allgemeine Java-Themen 12
D einfache Filterung optimieren Allgemeine Java-Themen 16
M Einfache Kundenverwaltung, guter Programmierstil Allgemeine Java-Themen 3
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
N einfache Klassen Allgemeine Java-Themen 18
M Schnelle Scriptsprache für einfache Funktionen? Allgemeine Java-Themen 5
R Einfache Matheaufgabe - Daten auf Anzeigebereich verteilen Allgemeine Java-Themen 4
E einfache grafische Oberfläche wie in MS C#? Allgemeine Java-Themen 6
E einfache Frage zu Vector Allgemeine Java-Themen 8
E Einfache Frage zu ListIterator Allgemeine Java-Themen 10
E einfache Frage zu getRealPath(.) Allgemeine Java-Themen 2
E einfache Frage zu protected Allgemeine Java-Themen 10
E einfache Frage zu verdeckten Membern Allgemeine Java-Themen 2
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
thor_norsk toString() - Methode Allgemeine Java-Themen 6
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
T Sinn einer toString Methode Allgemeine Java-Themen 3
L ToString-Methode Allgemeine Java-Themen 6
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
A Bleibt toString() konstant? Allgemeine Java-Themen 8
E Seltsamer aufruf von java.util.Date.toString() Allgemeine Java-Themen 3
P Element toString Allgemeine Java-Themen 9
fastjack jUnit und Test von equals, hashCode, toString Allgemeine Java-Themen 11
sylo toString() Methode eines Interfaces überladen. Allgemeine Java-Themen 17
G Arrays.toString Allgemeine Java-Themen 4
G toString() von java.io.File überschreiben Allgemeine Java-Themen 8
S toString() für alle Member einer Klasse. Allgemeine Java-Themen 6
R toString() methode überschreiben mit rekursivem aufruf. Allgemeine Java-Themen 8
G toString(), Funktionsweise? Allgemeine Java-Themen 7
I Problem mit toString-Methode Allgemeine Java-Themen 6
M .toString() mit RegEx auseinanderpflücken. Allgemeine Java-Themen 17
B (String) und toString(), woliegt der Unterschied? Allgemeine Java-Themen 4
LimDul Eindeutige ID (ala UUID) generieren als numerisch, maximal 16 Stellen Allgemeine Java-Themen 11
R Farbe zu einem Eckpunkt generieren Allgemeine Java-Themen 0
J Sudoku generieren Schwierigkeitsgrad Allgemeine Java-Themen 3
G Aus JTextField Zahlen auslesen und random generieren Allgemeine Java-Themen 10
D Mail aus GUI generieren Allgemeine Java-Themen 2
J Primzahlen generieren Allgemeine Java-Themen 6
M Serien- / Werksnummern generieren Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
N Zahl mit bestimmter Länge und nur bestimmten Zahlen generieren lassen Allgemeine Java-Themen 7
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
T Geschwindigkeit beim Generieren erhöhen? Allgemeine Java-Themen 7
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
L Generieren Zufallsdaten aus CSV dateien Allgemeine Java-Themen 11
N String generieren Allgemeine Java-Themen 3
J Hash aus Verzeichniss generieren Allgemeine Java-Themen 2
Eldorado Barcodes mit statischer Breite generieren Allgemeine Java-Themen 3
M aus 3 BufferedImages 1 generieren Allgemeine Java-Themen 5
E Zufallszahl generieren Allgemeine Java-Themen 5
M Shapes mit abgerundeten Ecken generieren Allgemeine Java-Themen 2
T Zufallszahlen generieren und dabei eine Zahl weglassen Allgemeine Java-Themen 4
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
O .jar Files - Tools zum generieren Allgemeine Java-Themen 25
B PDF generieren. Problem mit PipedStreams. Allgemeine Java-Themen 4
G UML aus Commandline generieren Allgemeine Java-Themen 9
M nicht gleichverteilte Zufallszahlen generieren Allgemeine Java-Themen 6
B Mit Java Powerpoint Reporte und PDF generieren Allgemeine Java-Themen 9
lumo "Exzessiv" dynamisches generieren Allgemeine Java-Themen 6
B Schlüssel von Java automatisch generieren lassen. Allgemeine Java-Themen 4
T Einfachen Ton in Java generieren Allgemeine Java-Themen 4
B String generieren Allgemeine Java-Themen 4
S Datei aller möglich encodings generieren Allgemeine Java-Themen 2
G Char-zufällig-generieren Allgemeine Java-Themen 11
H RTF zu Word-Dokument generieren Allgemeine Java-Themen 5
B Namen eines Objekts generieren? Allgemeine Java-Themen 4
C Laufende Nummer generieren Allgemeine Java-Themen 4
S Dynamisches Feld generieren. Allgemeine Java-Themen 10
N Transaktionsnummer (Tan) generieren? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben