Μπορούμε να την αναλύσουμε λίγο;
Φυσικά!
η αναφορά 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 'δείχνει' στο τρέχον αντικείμενο. Όταν λοιπόν έχεις μια έκφραση του στυλ
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." για να μην χρειαστεί να εισάγουμε διαφορετικό όνομα παραμέτρου στην setter από αυτό της μεταβλητής μέλους;
Στο παράδειγμα που ανέφερες θα μπορούσε δηλαδή κάλλιστα να είναι:
public void setSomething(int something){
memberVariable = something;
}
Στο παράδειγμα που ανέφερες θα μπορούσε δηλαδή κάλλιστα να είναι:
public void setSomething(int something){
memberVariable = something;
}
Περίπου...δεν ξέρω αν το κατάλαβες καλά. Αν τη μεταβλητή μέλος σου τη λένε memberVariable τότε την αντίστοιχη setter θα έπρεπε να τη λέμε:
public void setMemberVariable(int memberVariable){
this.memberVariable = memberVariable;
}
Η this χρησιμοποιείται από τα IDEs γιατί χρησιμοποιούν ως όνομα παραμέτρου αυτό που έχουμε δώσει στη μεταβλητή μέλος. Αν γράψεις τη setter μόνος σου, καλό είναι να ονομάσεις την παράμετρο διαφορετικά και να αποφύγεις τη χρήση της this, δηλαδή:
public void setMemberVariable(int something){
memberVariable = something;
}
public void setMemberVariable(int memberVariable){
this.memberVariable = memberVariable;
}
Η this χρησιμοποιείται από τα IDEs γιατί χρησιμοποιούν ως όνομα παραμέτρου αυτό που έχουμε δώσει στη μεταβλητή μέλος. Αν γράψεις τη setter μόνος σου, καλό είναι να ονομάσεις την παράμετρο διαφορετικά και να αποφύγεις τη χρήση της this, δηλαδή:
public void setMemberVariable(int something){
memberVariable = something;
}