2016-03-28 7 views
1
public class Leaf { 
int i=0; 
Leaf increment() { 
    i++; 
    return this; 
} 
void print() { 
    System.out.println("i= "+ i); 
} 
public static void main(String[] args) { 
    Leaf x =new Leaf(); 
    x.increment().increment().increment().print(); 
} 
} 

Ausgang:Welchen Zweck hat die Verwendung des Schlüsselworts "this" in diesem Code-Snippet?

i=3 

Bis jetzt weiß ich, dass das this Schlüsselwort verwendet wird, um die Referenz auf das Objekt zu erzeugen, dass das Verfahren für aufgerufen wurde. In diesem Code ruft also das Objekt x das Methodeninkrement auf und das Schlüsselwort this gibt einen Verweis auf x. Aber wie hilft das einem bei der Ausführung mehrerer Inkremente wie in der folgenden Zeile?

x.increment().increment().increment().print();

+2

'x' ==' this', also gibt es 'x' zurück, was dann natürlich mehr Operationen haben kann. –

Antwort

5

Sie haben ein Beispiel für method chaining geschrieben; die verknüpfte Wikipedia Eintrag sagt (teilweise)

Method Verkettungs, die auch als benannten Parameter Idiom bekannt, eine gemeinsame Syntax zum Aufrufen von mehreren Verfahren ist, ruft in objektorientierten Programmiersprachen. Jede Methode gibt ein Objekt zurück, sodass die Aufrufe in einer einzigen Anweisung verkettet werden können, ohne dass Variablen zum Speichern der Zwischenergebnisse erforderlich sind.

In x.increment().increment().increment().print(); jeder increment() ist auf den nächsten Anruf gekettet. Und beginnt increment mit i++ so jedem Anruf erhöht i um 1. Es ist funktional äquivalent zu

x.increment(); 
x.increment(); 
x.increment(); 
x.print(); 

Siehe auch die StringBuilder.append() Methoden; sie kehren auch thisMethode wie

System.out.println(new StringBuilder("Hello ").append("World")); 
0

Nichts Besonderes oder vage geht hier Verkettungs zu ermöglichen, ist die Frage, wie , dass man mehrere Stufen bei der Durchführung, wie in der folgenden Zeile hilft? Sie rufen die increment() -Methode dreimal auf, so einfach, dass die increment-Methode id ein Objekt nur für diese Klasse zurückgibt, damit die increment-Methode erneut aufgerufen werden kann. Wenn also x ein Objekt vom Typ Leaf ist, ist x.increment auch ein Objekt vom Typ Leaf (Rückgabetyp des Inkrements ist Leaf), so dass die increment-Methode erneut aufgerufen werden kann. Jedes Mal, wenn die Inkrement-Methode aufgerufen wird, erhöhen wir das i um 1. Please lassen Sie mich wissen, wenn es immer noch nicht klar ist.

Verwandte Themen