Warum wird in diesem Konstruktor nicht der Befehl "this." benötigt? (Java)

7

Ich lese ein Buch über Java. Es muss nur erklärt werden, wie Sie eine Klasse namens "Deck" erstellen, die ein Array von Karten als Instanzvariable (n) enthält. Hier ist der Code snippit:

%Vor%

Warum wird der Befehl this. nicht verwendet?

zum Beispiel warum ist der Code das nicht:

%Vor%     
David 22.03.2010, 18:35
quelle

10 Antworten

12

this. ist implizit.

Im Allgemeinen ist es eine Best Practice (mindestens I halte es für eine), this nur zu verwenden, wenn es absolut notwendig ist. Wenn Sie beispielsweise eine lokale Variable namens cards und eine Membervariable cards haben, benötigen Sie this.cards , um auf die Membervariable zu verweisen, da cards sich auf die lokale Variable bezieht.

In solch einem Fall ist this eine gute Idee (obwohl es vielleicht eine bessere Idee wäre, die Elementvariable umzubenennen).

In allen anderen Fällen, in denen ein implizites this funktionieren kann, verwenden Sie es.

    
Randolpho 22.03.2010, 18:36
quelle
20

Weil es keine Zweideutigkeit gibt. Es gibt nur eine cards Variable. this würde benötigt, wenn es zwei gibt - eine davon ist eine Instanzvariable (Teil der Klasse, wie es derzeit ist), und die andere - ein Argument des Konstruktors.

Und übrigens, this ist kein "Befehl". Es ist ein "Schlüsselwort".

    
Bozho 22.03.2010 18:37
quelle
8

Sie müssen nicht alle Zugriffe auf Mitglieder mit dem Schlüsselwort this qualifizieren. Sie müssen es nur verwenden, wenn eine andere Variable die Member-Methode versteckt.

Und das ist kein Merkmal, das auf den Konstruktor beschränkt ist, sondern in allen Methoden verfügbar ist:

%Vor%     
quelle
4

Die this -Referenz des Objekts ist impliziert, kann aber der Übersichtlichkeit dienlich sein (und ist für die Disambiguierung zwischen dem Member eines Objekts und einer lokalen Variablen mit demselben Namen wie im folgenden Konstruktor erforderlich):

%Vor%     
Jason S 22.03.2010 18:39
quelle
3

Wenn Sie den Bezeichner cards im Konstruktor verwenden, stellt der Compiler fest, dass das Feld (a.k.a.mitgliedsvariable) cards im Geltungsbereich ist, und verwendet es. this.cards wäre nur notwendig, um Mehrdeutigkeiten aufzulösen, zum Beispiel, wenn Sie auch eine lokale Variable oder einen Parameter namens cards haben.

    
Will 22.03.2010 18:37
quelle
3

Es wäre sinnvoll, wenn Sie auch einen Parameter namens cards haben. Dann würde this.cards angeben, dass Sie genau das Feld cards der Klasse meinen, nicht den Parameter.

Aber trotzdem ist es eine gute Übung, this. in Fällen zu verwenden, wie in Ihrem Beispiel beschrieben.

    
Roman 22.03.2010 18:38
quelle
2

This ist impliziert.

Lassen Sie uns das ausarbeiten:

%Vor%

In diesem Fall geben Sie ein Array von Karten mit demselben Namen wie das Kartenfeld des Objekts ein. This bezieht sich auf die Datennummer Ihres Objekts, nicht auf den Parameter des Konstruktors.

    
Bryan Denny 22.03.2010 18:37
quelle
1

Das Schlüsselwort "this" ist in diesem Fall überflüssig. Karten sind bereits im Klassenumfang definiert und der Compiler weiß, dass das Mitglied Teil dieser "Klasse" ist.

    
Paul Sasik 22.03.2010 18:37
quelle
0

"Dies" ist impliziert. Es besteht keine Notwendigkeit, "das" zu verwenden. Normalerweise lege ich es dort hin, um den Code lesbar zu machen, aber es ist auch nicht nötig.

    
Felix Khazin 22.03.2010 18:37
quelle
0

Ich versuche, Variablennamen so auszuwählen, dass das Schlüsselwort "this" nicht benötigt wird. Das heißt, wenn ich eine Eigenschaft namens "value" habe, übergehe ich einen Parameter namens val.

Eine gute Verwendung des Schlüsselworts "this" ist für das Überladen von Konstruktoren. Betrachten Sie folgendes (ich werde das verwenden, um den Unterschied zu demonstrieren):

%Vor%

Wenn möglich, werde ich versuchen, den Namen der Eigenschaft und des Parameters zu vermeiden, um zu vermeiden, was Sie in Zeile 6 sehen. Die Verwendung des this-Schlüsselworts zum Aufrufen eines anderen Konstruktors ist jedoch eine gute Möglichkeit, Code-Duplizierung zu verhindern . Dies ist ein triviales Beispiel, aber wenn Sie anfangen, sich selbst mit Konstruktoren zu finden, die viele der gleichen Arbeit mit kleinen Unterschieden zwischen ihnen tun, ist es sehr praktisch.

    
RavB 27.07.2010 14:45
quelle

Tags und Links