[Java] this ?

333

Neu angemeldet
Registriert
14 Juli 2013
Beiträge
258
Ort
Österreich
Hey!

Ich hab eine kurze und bündige Frage, angenommen ich hab eine Funktion:

[src=java]
public Heading(int level, String text) {
this.setLevel(level);
super.add(new Text(text));
}
[/src]

macht es da sin die Funktion setLevel(), welche sich in der gleichen Klasse befindet mit this.setLevel aufzurufen oder ist es völlig egal wenn ich sie mit setLevel() aufrufe? Wann brauch ich nun dieses this? nur wenn ich namensüberschneidungen mit Variablen habe?

Mfg
 
Meines Wissens ist das this nur bei Namensüberschneidungen zwingend. Ansonsten solltest du dir eben einen einheitlichen Stil angewöhnen, also immer mit dazu schreiben oder immer weg lassen wenns nicht zwingend nötig ist.
 
Ja, das this-Schlüsselwort bezieht sich auf die aktuelle Objektinstanz. Wenn keine Namensüberschneidungen bestehen (d.h. in keinem der Klasse untergeordneten Scope Variablen/Methoden/Klassen mit demselben Bezeichner existieren), ist es jedoch nicht notwendig, es beim Zugriff auf Objekteigenschaften und -Methoden explizit anzugeben. Meines Erachtens ist sinnvoller, Namensüberschneidungen grundsätzlich zu vermeiden und auf das this-Schlüsselwort zu verzichten, da die Überschneidungen (z.B. bei einem vergessenen `this`) sehr leicht zu schwer auffindbaren Fehlern führen.
 
Das Beispiel past nicht zur Frage.

also zu deinem Beispiel. Hier etwas verändert um zu verdeutlichen um was es geht.


[src=java]
public void test() {
this.methode();
methode();

super.methode();
}
[/src]


Wenn eine Klasse von einer andern Klase erbt, dann kann man in der Subklasse die Methoden der Superklasse überschreiben. Du kannst this vor die Methode schreiben oder weglassen, dann wird die Methode, von der Klasse in der du die Methode aufrufst, aufgerufen. Wenn du super davor schreibst, dann wird die Methode der Superklasse aufgerufen.
 
Also persönlich würde ich schon this. verwenden. Warum? Der Code ist dadurch einfach leichter zu lesen. Wenn man eine längere Methode hat die auf Klassen-Attribute zugreift kann this. schon zur Lesbarkeit beitragen. Aber das ist halt reine Geschmackssache.
 
Ich arbeite nicht mit Java, aber bei anderen Sprachen verwirrt mich persönlich das eher, wenn da z.B. ein Me. vor der Methode ständ. Einfach, weil ich dann direkt denk "oh, das is was besondres". Ich denk da einfach einen Moment länger drüber nach, wenn ichs lese, als wenns nicht da ständ. Aber wie Larius sagt, ist wohl einfach eine Frage der Gewöhnung.
 
Ja gut, sowas kann zu Verwirrungen führen, aber wenn man es gewöhnt ist erleichtert es schon relativ stark die Suche. Ich hatte das Vergnügen mal an einer Java-Klasse zu arbeiten wo mehrere verschiedene Sachen - Lokale Variablen, Klassenattribute, Static-Ausdrücke und Methodenaufrufe - drinnen vorgekommen sind. Das wurde einfach durch die richtige Beschriftung weitaus lesbarer und somit auch wartbarer wie wenn da einfach alles ohne Bezeichnung gestanden ist. Aber man muss halt selbst draufkommen wie man sich am Leichtesten tut ;)
 
Zurück
Oben