Wenn man am entwickeln ist baut man fast automatisch Logginganweisungen ein um dem Programmverlauf zu folgen, sofern man keine Debug-Umgebung nutzen kann. Meistens nutzt man dann an mehreren Stellen fast die gleichen Zustandsausgaben.
Macht man sich einmal die Arbeit, die tostring() Methode zu überladen, erspart man sich eine Menge Arbeit und hällt nebenbei den Quellcode des eigentlichen Programmablaufs frei von überflüssigem Code.
Folgende Situation:
Object:
public class object {
private String vString1 = "";
private int vIntZahl = 1;
public String toString() {
return ("der Inhalt des aktuellen Objektes ist: vString1: " + vString1 + " vIntZahl: " + vIntZahl);
}
public String getVString1() {
return vString1;
}
public void setVString1(String string1) {
vString1 = string1;
}
public int getVIntZahl() {
return vIntZahl;
}
public void setVIntZahl(int intZahl) {
vIntZahl = intZahl;
}
}
Main Mathode:
public class mainclass {
public static void main(String[] args) {
Exampleobject vConcreteObject= new Exampleobject();
System.out.println("Inhalt vorher: "+vConcreteObject.toString());
vConcreteObject.setVIntZahl(3);
vConcreteObject.setVString1("hallo");
System.out.println("Inhalt nachher: "+vConcreteObject.toString());
}
}
Normal müssten wir bei beiden System.out Aufrufen die Get-Funktionen des Objektes nutzen. Die Ausgabe ist nun an jedem Ort normiert und wenn sich etwas am Aufbau des Objektes ändert, kann dies zentral in der toString() Methode angepasst werden und alle zugreifenden Ausgaben können genutzt werden.
Weiterführend könnte man natürlich eine toLog() Funktion einführen, wenn man ausführlichere Informationen haben möchte, das Prinzip bleibt aber gleich.
Noch einen drauf setzen kann man mit dem Umleiten der log Nachrichten per Syslog an seine eigene Syslog factory.