Je suis juste curieux au sujet de l'utilisation de this
, parce que l'exemple de code et la documentation d'Android ne font pas usage du mot-clé this
(J'aime croire que les ingénieurs androïdes sont généralement intelligents, ainsi mon les utilisant comme base). Je suis juste curieux de savoir la raison sous-jacente que les ingénieurs Android ne font pas usage de this
beaucoup.Est-ce une mauvaise pratique d'utiliser `this` en Java?
Répondre
C'est principalement une différence stylistique. Je n'ai pas encore vu un argument pour savoir pourquoi c'est bon ou mauvais. Personnellement, j'aime l'utiliser et il y a quelques cas où vous devez l'utiliser. Par exemple si vous avez une classe Anonymous Inner qui veut appeler une méthode de la classe parent, vous avez besoin de this
. Exemple:
class MyClass{
protected void doSomething(){
}
OnClickListener n = new OnClickListener(){
public void onClick(View v){
MyClass.this.doSomething();
}
};
}
Une autre raison d'utiliser this
est si un masque d'arguments de méthode d'une variable de membre. Dans ce cas, vous pouvez utiliser this
pour faire la distinction entre les deux, bien que je vous recommande de renommer l'argument en quelque chose qui ne masque pas.
class MyClass{
protected int val;
public void setVal(int val){
this.val = val; // set the member variable equal to the method argument
}
}
Une autre raison d'utiliser this
est en passant un pointeur vers l'instance de classe actuelle à partir de cette instance. Un exemple de cela est lorsque vous créez un nouveau Intent
Intent i = new Intent(this, NewActivity.class);
Il y a probablement plus d'endroits où vous aurez besoin d'utiliser this
. Ce sont les premiers qui me sont venus à l'esprit.
L'utilisation de ce paramètre n'est nécessaire que si vous souhaitez accéder à une partie de l'instance actuelle masquée par un autre élément dans la portée locale. Ce n'est pas nécessaire dans votre classe interne car OnClickListener n'a pas de doSomething() masquant MyClass # doSomething(). – jackrabbit
Peu importe, mais si vous utilisez 'this' dans votre code, assurez-vous de l'utiliser partout. Cela rend votre code clair.
C'est un goût plus personnel qu'une mauvaise pratique.
Non ce n'est pas, il y a des références à «ceci» dans l'exemple de code pour Android, mais il n'y a aucune raison de penser que c'est une mauvaise pratique. Cependant, la plupart du temps, cela n'est pas nécessaire et cela a peut-être été omis pour des raisons de concision.
Par exemple, un appel à methodA() à partir de la classe définie est appelé this.methodA(). Ce n'est pas nécessaire dans ce cas car cela est implicite lorsque vous faites l'appel. Il est couramment utilisé dans les setters où le nom de l'argument est le même que le nom de la variable que vous définissez.
public void setName(String name) {
this.name = name;
}
Qu'est-ce qui vous fait penser que c'est le cas? Par exemple. SDK coding style guide ne mentionne pas cela et j'ai vu cela étant utilisé dans divers endroits. Cependant, en suivant les directives de nommage pour les variables, cela n'est souvent pas nécessaire et peut être omis, ce qui est souvent le cas. Lorsque vous faites référence à une instance utilisant ce mot-clé, il est bon pour la clarté, mais comme le document mentionne qu'il n'y a pas de style vraiment appliqué et que les règles de nommage ne le rendent pas nécessaire.
par exemple. un setter totalement valable après la nomination avec et sans cela pourrait être
private int mCounter;
public void setCounter(int counter) {
mCounter = counter
}
private int increment;
public void setIncrement(int increment) {
this.increment = increment
}
Notez que dans le premier exemple, vous pouvez, mais ne doivent l'utiliser. Dans la seconde vous devez et le premier il est probablement plus proche du guide de style ..
J'ai juste supposé qu'ils n'aimaient pas ça parce que la plupart des exemples de code et de documentation que j'ai vus ne l'utilisent pas. Cela rendait la documentation un peu plus difficile à lire pour moi, car elle mentionnait une méthode dite 'startService()', et je ne connaissais pas la classe qui contient 'startService()'. – cesar
pour les invocations de méthode, il est différent. S'il n'y a pas de qualificatif en place c'est automatiquement this.quelquechose() et cela est très rarement utilisé dans Java en général. Je ne l'utiliserais pas. –
* "J'ai juste supposé ..." * - le consensus est que vous avez supposé faux. –
L'utilisation this
est plus d'une mesure de sécurité:
class MyClass{
void doSomething() {
}
OnClickListener n = new OnClickListener() {
void doSomething() {
}
public void onClick(View v){
MyClass.this.doSomething(); // MyClass#doSomething()
this.doSomething(); // OnClickListener#doSomething()
doSomething(); // OnClickListener#doSomething() if present,
// MyClass#doSomething() otherwise - danger!
}
};
}
Comme il y a des cas où vous ne pouvez pas contrôler la présence d'un membre ou d'une méthode (par exemple, lorsque le OnClickListener
est une classe tiers), à obtenir un comportement prévisible, vous devriez toujours qualifier une telle référence. À moins que le comportement variable soit exactement ce que vous voulez.
- 1. Mauvaise pratique en PHP?
- 2. Bonne pratique ou mauvaise pratique
- 3. est @unlink une mauvaise pratique?
- 4. this = this en Java décompilé
- 5. Implémente la mauvaise pratique OnSharedPreferenceChangeListener?
- 6. Est-ce considéré comme une mauvaise pratique en C#?
- 7. Pourquoi SendKeys est-il une mauvaise pratique?
- 8. Est-ce une mauvaise pratique? C++
- 9. href avec "#", est-ce une mauvaise pratique?
- 10. rel = "tooltip", est-ce une mauvaise pratique?
- 11. java « this » en C++
- 12. MVC bonne ou mauvaise pratique
- 13. AlarmManger démarre et s'arrête constamment, mauvaise pratique?
- 14. mauvaise division en Java
- 15. Les fichiers intermédiaires sont-ils une mauvaise pratique?
- 16. Problème avec $ (this) .val(). Longueur en chrome - mauvaise valeur
- 17. Est-ce une mauvaise pratique d'utiliser des classes co-dépendantes?
- 18. Java attribuant une nouvelle valeur à un paramètre, est-ce considéré comme une mauvaise pratique?
- 19. Adaptateur de matrice statique en fragment. Bonne ou mauvaise pratique?
- 20. try catch mauvaise pratique de programmation
- 21. Mauvaise pratique à utiliser Fonctions variables?
- 22. mauvaise pratique? ce qui est il appelé '
- 23. Partial-moqueur considéré comme une mauvaise pratique? (Mockito)
- 24. L'utilisation de CURL pour SOAP est-elle une mauvaise pratique?
- 25. Est-ce une mauvaise pratique d'avoir des formulaires imbriqués?
- 26. L'utilisation d'étiquettes dans JavaScript est-elle une mauvaise pratique?
- 27. Les arguments NULL sont-ils une mauvaise pratique?
- 28. Est-ce une mauvaise idée/pratique quels problèmes rencontrerais-je
- 29. Javascript pourquoi FOR IN est une mauvaise pratique?
- 30. Est-ce une mauvaise pratique d'implémenter plusieurs appels de fonction?
Pourriez-vous donner un exemple où vous ne pouvez pas vivre sans * ceci *? – Gleno
en utilisant 'this' est une bonne pratique pas sûr à propos de Android cependant. Pourrait avoir quelque chose à coder avec la valeur de clé. – Shahzeb
Je suppose que je peux vivre sans, mais personnellement, je trouve que c'est plus facile à utiliser. C'est plus explicite pour moi, ce qui le rend plus clair. – cesar