Grundsatzdiskussion: Methode, die Objekt der Klasse zurückliefert

Kryptaesthesie

Erfahrenes Mitglied
Hallo,

einfach mal eine Grundsatzfrage an die großen Meister, die mir hier schon so oft super geholfen haben :) Aber natürlich darf sich jeder angesprochen fühlen etwas dazu zu sagen ...

Mich würde interessieren, wie ihr Methoden findet, die das Objekt, also this zurückgeben?
einfaches Beispiel:
Code:
public class GibZurueck
{

    private boolean gesetzt = false;
    
    public GibZurueck()
    {
        
    }
    
    public GibZurueck setGesetztNeu(boolean neuerWert)
    {
        this.gesetzt = neuerWert;
        
        return this;
    }
    
    public boolean getGesetzt()
    {
        return this.gesetzt;
    }
    
    public static void main(String[] args)
    {
        GibZurueck gz = new GibZurueck();
        
        System.out.println( "Wert = " + gz.setGesetztNeu(true).getGesetzt() );
    }

}

Oder muss man noch spezielles beachten, dass auch wirklich das Objekt zurückgegeben wird?
Haut mir aber ruhig auf die Finger, wenn ich da böses gemacht habe! :)

Danke euch! :)
Gruß
Gerrit
 
In diesem Fall halte ich eine getter-Methode für sinnlos, da die Variable/das Objekt sowieso in der gleichen Klasse ist und somit immer Zugriff besteht.
Solche getter- und setter-Methoden sind dafür gedacht, dass du anderen Klassen eine Schnittstelle auf die Variable/das Objekt bietest. So kannst du z.b. verhindern, dass eine fremde Klasse einen ungültigen Wert in das Objekt schreibt.
 
In diesem Fall halte ich eine getter-Methode für sinnlos, da die Variable/das Objekt sowieso in der gleichen Klasse ist und somit immer Zugriff besteht.
Solche getter- und setter-Methoden sind dafür gedacht, dass du anderen Klassen eine Schnittstelle auf die Variable/das Objekt bietest. So kannst du z.b. verhindern, dass eine fremde Klasse einen ungültigen Wert in das Objekt schreibt.
Ja, in diesem Fall :)
Das sollte auch nur ein Beispiel sein. In meinem Anwendungsfall sieht das eher so aus:
Code:
sbHTML.append( new EineKlasse.tuWas().getWert() );
Also es handelt sich schon um unterschiedliche Klassen.
 
Diese Methodik ist durchaus üblich und nennt sich Fluent Interface. Vorrangig findet man das bei Implementierungen des ValueObject Pattern (d.h. für Typen die immutable sind). Hier wird dann aber oft nicht this zurückgegeben sondern eine neue Instanz der Klasse. Die Methoden heißen dann auch eher withFooBar() um den konfigurativen Aspekt besser zu verdeutlichen.

Für Setter kann man das machen um z.B. die Konfigurationsmöglichkeit der Klasse zu verdeutlichen.

Den Punkt mit dem sinnlosen Getter kann ich so nicht zustimmen. Oft benutzt ein Client das Objekt durch ein Interface, dass nur den Getter enthält. Die Settermethode ruft dann im Idealfall eine Factory, die die Instanz "konfiguriert" und nur über das Interface zurückgibt. So erlaubt man die Konfiguration an einer zentralen Stelle und verhindert das nachträgliche Umkonfigurieren. Sehr beliebte Methodik im bereich Serverprogrammierung / Spring usw.

Gruß
Ollie
 
...Hier wird dann aber oft nicht this zurückgegeben sondern eine neue Instanz der Klasse. Die Methoden heißen dann auch eher withFooBar() um den konfigurativen Aspekt besser zu verdeutlichen.
Spricht denn etwas dagegen nicht eine neue Instanz zurückzugeben, sondern die aktuelle Instanz? Weil ansonsten müsste ich in die Instanz wieder alle anderen noch vorhandenen Variablen rüberschaufeln, die da noch so rumfleuchen :) Das brauch ich so nicht.

Vielen Dank für eure Antworten! ;-)
Gruß
Gerrit
 
Nope. Dadurch, dass du die Methode weiter setFooBar() heißt wird deutlich, dass sie manipulativen Charakter hat. D.h. das ist durchaus okay.

@deepthroat - den Link hatte ich gesucht ;)

REINHAUN!
 

Neue Beiträge

Zurück