This-Referenz als Returnwert einer Methode?

OOPler

Mitglied
Ich verstehe nicht warum man Methoden, wenn sie einen this-Referenz als Rückgabewert besitzen, verketten kann. Dazu folgendes Bspl:

Java:
public class Bruch
{
   private int zaehler;
   private int nenner;

  public void print()
  {
   System.out.println(zaehler + "/" +nenner);
  }
  
  public Bruch setzeWerte(int zaehler, int nenner)
  {
	this.zaehler = zaehler;
	this.nenner = nenner;
	return this;
  }

  public Bruch multipliziere(int faktor)
  {
	setzeWerte(zaehler*faktor, nenner);
	return this;
  }

}

public class BruchTest
{
	public static void main(String[] args)
	{
		Bruch b1 = new Bruch();
		System.out.println("Wert des Bruches b1: ");
		b1.setzeWerte(1,2).print();
	}
}

Warum lassen sich nun die beiden Methoden verketten. This ist doch eine eine Referenz auf ein Objekt Bruch?Wieso lassen sich nun beide Methoden verketten?
 

Joose

Top Contributor
Warum lassen sich nun die beiden Methoden verketten. This ist doch eine eine Referenz auf ein Objekt Bruch?Wieso lassen sich nun beide Methoden verketten?

"b1" ist auch nur eine Referenz auf ein Objekt. Und von diesem Objekt kannst du auch Methoden aufrufen.
Korrekt, this ist die Referenz auf das "aktuelle" Objekt.
"return this;" gibt somit das Objekt selbst zurück und von diesem Objekt kannst du wieder Methoden aufrufen.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Genau du könntest den Rückgabewert von der Methode "setzeWert" in einer lokalen Variable zwischenspeichern.
Und mit dieser lokalen Variable weiterarbeiten oder eben wie oben -> direkt den Punkt"operator" verwenden.

Achtung: Solche Verkettungen sind aber nicht immer passend und sollten mit Vorsicht eingesetzt werden.
Nimm an du hast eine Verkettung von 10 Methodenaufrufen.
Es fliegt eine Exception -> Wie findest du jetz am Besten heraus, welcher der 10 Aufrufe genau die Exception warum verursacht hat und warum?

Außerdem sind solche "Verkettungen" je länger sie sind schwieriger zu lesen (Aufruf 1 gibt Objekt X zurück, Aufruf 2 gibt Objekt Y zurück usw.)
 

OOPler

Mitglied
Eine Frage stellt sich mir aber noch wenn return this das objekt selbst zurueck gibt, aber noh kein objekt, zur zeit als die methode geschrieben wurde angegt wurde. Dann wird im spaeteren verlauf ein objekt angelegt, hier b1. Also gibt return this praktisch b1 als Objekt zurueck?
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Man muss bei Java etwas vorsichtig sein - es wird mitunter "schlampig gesprochen".

Wenn man's exakt nimmt, wird in Java niemals "ein Objekt übergeben" oder "ein Objekt zurückgegeben" oder ähnliches, sondern immer Objekt-Referenzen (volgo "Pointer"). Man kann auch kein "Objekt deklarieren", sondern nur eine Objekt-Referenz-Variable (eine Variable, die einen Pointer beinhaltet).

'this' ist genauso ein Pointer wie b1.
Und der '.'-Operator ist einfach die Pointer-Dereferenzierung.
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
'this' ist eine Systemvariable, die nur gelesen werden kann, und immer eine Referenz auf das "umgebende Objekt" liefert, zu dem die aktuelle Ausführung (Methode) gehört.
Daher bekommt man z.B. in 'static' Methoden einen Fehler, wenn man auf 'this' zugreifen möchte - ist ja kein Objekt "drumrum".
 

Thallius

Top Contributor
Im obigen Beispiel finde ich das übrigens ziemlich unangebracht. Das eine Methode die Werte in einem Objekt setzt eine Referenz auf das Objekt zurück gibt ist unerwartet und unüblich. Ich würde so etwas nicht implementieren da es mehr verwirrt als hilft.

Gruß

Claus
 

Natac

Bekanntes Mitglied
Findest du? Also gerade bei Settern sehe ich bei einigen APIs häufig ein "return this", eben damit man es als Fluent API nutzen kann.

Java:
Parent p = new Parent()
p.addChild(new Child().setA(42));

Finde ich persönlich auch gar nicht so doof, da es doch den Code irgendwie aufbläht, wenn man jedes Element nochmal kurz zwischenspeichern muss, um Setter aufzurufen. Ist aber vielleicht auch eine Geschmacksfrage.

Nachvollziehen, dass es trotzdem unsauber ist, kann ich allemal. Von Klassen mit solchen Settern erben wird dann auch lustig und unterstreicht deine Argumentation. Aber für "kleiner Klassen" finde ich es durchaus zu gebrauchen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
C Kopie oder Referenz ? Java Basics - Anfänger-Themen 5
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
Y Pointer / Referenz - Theorie Java Basics - Anfänger-Themen 3
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
D Uebergabe per Referenz Java Basics - Anfänger-Themen 2
O Referenz - toString Java Basics - Anfänger-Themen 9
S This-Referenz Java Basics - Anfänger-Themen 6
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
I Referenz auf Klasse als Rückgabewert Java Basics - Anfänger-Themen 7
P Datentypen LinkedList: Kopie behält Referenz? Java Basics - Anfänger-Themen 3
J Referenz und Instanzierung Java Basics - Anfänger-Themen 25
I Erste Schritte Referenz zum Knoten davor, in einer Liste Java Basics - Anfänger-Themen 4
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
8 Referenz (Pointer, Zeiger) in Java Java Basics - Anfänger-Themen 9
O This Referenz Java Basics - Anfänger-Themen 3
A top referenz bei queues Java Basics - Anfänger-Themen 1
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
Q Parameterübergabe - Objekt - Referenz Java Basics - Anfänger-Themen 5
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Frage zu Polymorphismus: Objekt der Subklasse in Referenz der Oberklasse Java Basics - Anfänger-Themen 4
T Aufgerufene Methode Inhalt der übergebenen Referenz Java Basics - Anfänger-Themen 5
B Referenz in Java Java Basics - Anfänger-Themen 5
C Referenz auf ein Objekt kopieren! Java Basics - Anfänger-Themen 2
J Methoden Referenz und Speicherplatz für Objekte reservieren Java Basics - Anfänger-Themen 2
M Wie komm ich an die Referenz eines Oberflächenelements Java Basics - Anfänger-Themen 2
A Klassenvariablen Referenz auf ein Objekt Java Basics - Anfänger-Themen 18
M Referenz Frage Java Basics - Anfänger-Themen 12
K OOP Probleme mit Objekt-Referenz in Methode Java Basics - Anfänger-Themen 6
W Die leidige Referenz-Frage Java Basics - Anfänger-Themen 9
B Arraycopy kopiert nur die Referenz?! Java Basics - Anfänger-Themen 3
S Speicheradresse auf die eine Referenz zeigt ausgeben Java Basics - Anfänger-Themen 12
E Compiler-Fehler kann Objekt-Referenz nicht erstellen Java Basics - Anfänger-Themen 3
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
Blackskyliner Referenz ähnlicher Zugriff, aber wie? Java Basics - Anfänger-Themen 4
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
C Referenz einer bereits instanziierten Klasse während des Programmablaufs Java Basics - Anfänger-Themen 16
H Objekt holen per Referenz als String. Java Basics - Anfänger-Themen 4
T Referenz einer Variable übergeben Java Basics - Anfänger-Themen 3
S Datentypen Objekt Integer Referenz Java Basics - Anfänger-Themen 5
B Referenz auf Referenz Java Basics - Anfänger-Themen 3
Luk10 Problem mit Singleton bzw statischer Referenz! Java Basics - Anfänger-Themen 16
H ArrayList Zugriffe per Referenz verkürzen? Java Basics - Anfänger-Themen 9
B Static Referenz auf Non-static Feld Java Basics - Anfänger-Themen 6
Luk10 Sinn von Instanzierung ohne Referenz Java Basics - Anfänger-Themen 7
C0FFEE Referenz auf Methode übergeben Java Basics - Anfänger-Themen 2
aze NullpointerException :Null Referenz anzeigen lassen Java Basics - Anfänger-Themen 2
D Fehlen einer Referenz auf Objekt Java Basics - Anfänger-Themen 14
N this.referenz erläuterung Java Basics - Anfänger-Themen 2
K Attribut als Referenz auf Objekt Java Basics - Anfänger-Themen 8
K 3 Threads bearbeiten 1 Referenz: Ich versteh's nicht... Java Basics - Anfänger-Themen 2
P OOP-Theorie-Frage: Referenz auf Objekt Java Basics - Anfänger-Themen 27
D Referenz auf Objekt Java Basics - Anfänger-Themen 5
P Methode BigInteger-Array übergeben als Referenz Java Basics - Anfänger-Themen 6
U null-referenz Java Basics - Anfänger-Themen 26
deetee Problem mit Referenz auf Map Java Basics - Anfänger-Themen 5
G Interface referenz probleme Java Basics - Anfänger-Themen 10
V Return - JA/NEIN - Parameterübergabe Array (Referenz) Java Basics - Anfänger-Themen 7
D enum und Referenz der umgebenden Klasse Java Basics - Anfänger-Themen 2
C Referenz Java Basics - Anfänger-Themen 11
A ClassNotFoundException: Referenz nicht aktualisiert Java Basics - Anfänger-Themen 2
P Textarea aktualisieren, Referenz fehlt Java Basics - Anfänger-Themen 4
T Die this Referenz Java Basics - Anfänger-Themen 21
C Größe einer Referenz ? Java Basics - Anfänger-Themen 16
D Array reverse Problem, da Referenz nicht auf tmpArray zeigt Java Basics - Anfänger-Themen 4
G primitive Datentypen als Referenz an eine Methode übergeben Java Basics - Anfänger-Themen 2
G Wie Referenz auf Objekt übergebn Java Basics - Anfänger-Themen 8
P Objekte als Attribut: Referenz oder Kopie? Java Basics - Anfänger-Themen 3
G Parameterübergabe als Referenz bzw. als Kopie Java Basics - Anfänger-Themen 4
S Prüfen, ob null Referenz? Java Basics - Anfänger-Themen 2
G Referenz-Problem Java Basics - Anfänger-Themen 3
J Referenz problem Java Basics - Anfänger-Themen 12
D tiefergehende Java-Referenz Java Basics - Anfänger-Themen 3
M Referenz auf Membervariable Java Basics - Anfänger-Themen 5
G Objektübergabe als Referenz bei RMI Java Basics - Anfänger-Themen 2
J referenz auf noch nicht erzeugte objekte? Java Basics - Anfänger-Themen 2
G Rückgabe einer Kopie bzw. Referenz Java Basics - Anfänger-Themen 22
M Parameter als Referenz übergeben Java Basics - Anfänger-Themen 5
F Referenz Pointer oder doch nochmal neu suchen ? Java Basics - Anfänger-Themen 2
D Unterschied zwischen Referenz auf Objekt/Instanz von Objekt Java Basics - Anfänger-Themen 9
K Referenz auf Funktion Java Basics - Anfänger-Themen 6
J Referenz auf ein Objekt Java Basics - Anfänger-Themen 2
javasdann Referenz als String ausgeben. Java Basics - Anfänger-Themen 10
B Was ist eine Referenz? Java Basics - Anfänger-Themen 6
Z Zugriff auf Attribute nach Zuweisung einer Referenz Java Basics - Anfänger-Themen 8
L Referenz vs. Kopie Java Basics - Anfänger-Themen 2
G Zeiger/Referenz auf int- Variable Java Basics - Anfänger-Themen 5
K If Verzweigung ReturnWert Java Basics - Anfänger-Themen 4
Y schleife mit einem Returnwert Java Basics - Anfänger-Themen 13
T Problem beim Returnwert einer Methode Java Basics - Anfänger-Themen 12
J Methode mit Returnwert Java Basics - Anfänger-Themen 3
J Int Returnwert in Double umwandeln? Java Basics - Anfänger-Themen 3
G Returnwert als Variablennamen benutzen Java Basics - Anfänger-Themen 6
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben