Φωτογραφία Παναγιώτης Μουτάφης
σχετικά με την "this.something = ..." στους setters
από Παναγιώτης Μουτάφης - Thursday, 29 April 2010, 6:08 PM
 
Μπορούμε να την αναλύσουμε λίγο;
 
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: σχετικά με την "this.something = ..." στους setters
από Νικόλαος Πανάγος - Thursday, 29 April 2010, 6:22 PM
 
Φυσικά!

η αναφορά this 'δείχνει' στο τρέχον αντικείμενο. Όταν λοιπόν έχεις μια έκφραση του στυλ
this.something = value;
είναι σαν να λες στον compiler "πήγαινε στη μεταβλητή μέλος something του τρέχοντος αντικειμένου και αποθήκευσε την τιμή value.
Αν το γράφεις στους constructors ή στις setters δεν είναι λάθος, είναι απλά πλεονασμός γιατί γράφοντας απλά
something = value;
πετυχαίνεις ακριβώς το ίδιο. Τα διάφορα IDEs χρησιμοποιούν την αναφορά this όταν παράγουν αυτόματα τις getters/setters γιατί χρησιμοποιούν ως όνομα παραμέτρου αυτό της μεταβλητής μέλους, π.χ. στο προηγούμενο παράδειγμα μια τυπική setter που έχει παραχθεί αυτόματα από το eclipse θα είχε τη μορφή:
public void setSomething(int something){
   this.something = something;
}
και για τον λόγο αυτό κάνουν χρήση της αναφοράς this προς αποφυγήν συγχίσεων.

ΝΠ

Φωτογραφία Παναγιώτης Μουτάφης
Απάντηση: σχετικά με την "this.something = ..." στους setters
από Παναγιώτης Μουτάφης - Thursday, 29 April 2010, 6:36 PM
 
Α, δηλαδή βάζουμε την "this." για να μην χρειαστεί να εισάγουμε διαφορετικό όνομα παραμέτρου στην setter από αυτό της μεταβλητής μέλους;
Στο παράδειγμα που ανέφερες θα μπορούσε δηλαδή κάλλιστα να είναι:
public void setSomething(int something){
   memberVariable = something;
}
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: σχετικά με την "this.something = ..." στους setters
από Νικόλαος Πανάγος - Thursday, 29 April 2010, 7:14 PM
 
Περίπου...δεν ξέρω αν το κατάλαβες καλά. Αν τη μεταβλητή μέλος σου τη λένε memberVariable τότε την αντίστοιχη setter θα έπρεπε να τη λέμε:

public void setMemberVariable(int memberVariable){
   this.memberVariable = memberVariable;
}

Η this χρησιμοποιείται από τα IDEs γιατί χρησιμοποιούν ως όνομα παραμέτρου αυτό που έχουμε δώσει στη μεταβλητή μέλος. Αν γράψεις τη setter μόνος σου, καλό είναι να ονομάσεις την παράμετρο διαφορετικά και να αποφύγεις τη χρήση της this, δηλαδή:

public void setMemberVariable(int something){
   memberVariable = something;
}
Φωτογραφία Παναγιώτης Μουτάφης
Απάντηση: σχετικά με την "this.something = ..." στους setters
από Παναγιώτης Μουτάφης - Thursday, 29 April 2010, 7:29 PM
 
Ναι, αυτό ακριβώς κατάλαβα. Thanks  smile
Φωτογραφία Νικόλαος Πανάγος
Απάντηση: σχετικά με την "this.something = ..." στους setters
από Νικόλαος Πανάγος - Thursday, 29 April 2010, 7:36 PM
 
OK! Γιατί προς στιγμήν νόμισα πως το χάσαμε :-)