Le this
mot-clé est principalement utilisé dans trois situations. Le premier et le plus courant est dans les méthodes de définition pour lever l'ambiguïté des références de variables. La seconde est quand il est nécessaire de passer l'instance de classe actuelle comme argument à une méthode d'un autre objet. Le troisième est comme un moyen d'appeler des constructeurs alternatifs à partir d'un constructeur.
Cas 1: Utilisation this
pour lever l'ambiguïté des références de variable. Dans les méthodes de définition de Java, nous transmettons généralement un argument avec le même nom que la variable de membre privé que nous tentons de définir. Nous attribuons ensuite l'argument x
à this.x
. Cela indique clairement que vous affectez la valeur du paramètre "nom" à la variable d'instance "nom".
public class Foo
{
private String name;
public void setName(String name) {
this.name = name;
}
}
Cas 2: utilisation this
comme argument passé à un autre objet.
public class Foo
{
public String useBarMethod() {
Bar theBar = new Bar();
return theBar.barMethod(this);
}
public String getName() {
return "Foo";
}
}
public class Bar
{
public void barMethod(Foo obj) {
obj.getName();
}
}
Cas 3: Utilisation this
pour appeler des constructeurs alternatifs. Dans les commentaires, trinithis a correctement signalé une autre utilisation courante de this
. Lorsque vous avez plusieurs constructeurs pour une même classe, vous pouvez utiliser this(arg0, arg1, ...)
pour appeler un autre constructeur de votre choix, à condition de le faire dans la première ligne de votre constructeur.
class Foo
{
public Foo() {
this("Some default value for bar");
//optional other lines
}
public Foo(String bar) {
// Do something with bar
}
}
J'ai également vu this
utilisé pour souligner le fait qu'une variable d'instance est référencée (sans la nécessité de la désambiguïsation), mais c'est un cas rare à mon avis.
William Brendel
la source
this(arg1, arg2, ...)
intérieur d'un constructeur.this
que j'avais oublié, alors je l'ai ajouté à ma réponse. Je ne vois rien de mal à cela parce que le résultat final est une meilleure réponse dans l'ensemble, ce qui est précisément l'objectif du SO. J'essaie également de donner du crédit dans la mesure du possible, comme je l'ai fait dans le cas des trinithis.this
n'est utilisé que si la désambiguïsation est vraiment nécessaire, comme dans mon exemple de setter ci-dessus. Les styles de codage et les "meilleures pratiques" peuvent varier considérablement en fonction de la personne à qui vous demandez, bien sûr, mais en général, je recommande de choisir des modèles raisonnables et de les respecter. La cohérence, même juste en interne dans une base de code unique, contribue grandement à la lisibilité et à la maintenabilité.La deuxième utilisation importante de
this
(en plus de se cacher avec une variable locale comme de nombreuses réponses le disent déjà) est lors de l'accès à une instance externe à partir d'une classe non statique imbriquée:la source
Vous n'avez besoin d'utiliser
this
- et la plupart des gens ne l'utilisent - que lorsqu'il existe une variable locale qui se chevauche avec le même nom. (Méthodes Setter, par exemple.)Bien sûr, une autre bonne raison d'utiliser
this
est qu'elle fait apparaître intellisense dans les IDE :)la source
Le seul besoin d'utiliser le
this.
qualificatif est lorsqu'une autre variable dans la portée actuelle partage le même nom et que vous souhaitez faire référence au membre d'instance (comme William le décrit). En dehors de cela, il n'y a pas de différence de comportement entrex
etthis.x
.la source
this.x
pour rendre votre code un peu plus clair, la maintenabilité / lisibilité du code est également un facteur que vous devriez considérer ..."this" est également utile lors de l'appel d'un constructeur à partir d'un autre:
la source
this
est utile dans le modèle de générateur.la source
Il y a beaucoup de bonnes réponses, mais il y a une autre raison très mineure à mettre
this
partout. Si vous avez essayé d'ouvrir vos codes source à partir d'un éditeur de texte normal (par exemple le bloc-notes, etc.), l'utilisationthis
le rendra beaucoup plus clair à lire.Imagine ça:
C'est très clair à lire avec n'importe quel IDE moderne, mais ce sera un cauchemar total à lire avec un éditeur de texte normal.
Vous aurez du mal à savoir où
foo
réside, jusqu'à ce que vous utilisez la fonction "trouver" de l'éditeur. Ensuite, vous crierezgetStringFromSomewhere()
pour la même raison. Enfin, après avoir oublié ce quis
est, celabar = s
va vous donner le coup de grâce.Comparez-le à ceci:
foo
c'est une variable déclarée dans la classe externeHello
.getStringFromSomewhere()
c'est aussi une méthode déclarée dans la classe externe.bar
appartient à laWorld
classe et qu'ils
s'agit d'une variable locale déclarée dans cette méthode.Bien sûr, chaque fois que vous concevez quelque chose, vous créez des règles. Ainsi , alors que la conception de votre API ou d'un projet, si vos règles sont « si quelqu'un ouvre tous ces codes sources avec un bloc - notes, il doit lui tirer dessus / elle - même dans la tête » , alors vous êtes tout à fait bien de ne pas faire cela .
la source
Sauf si vous avez des noms de variables qui se chevauchent, c'est vraiment juste pour plus de clarté lorsque vous lisez le code.
la source
this
mot - clé quand il n'est pas nécessaire, c'est juste du code passe-partout qui rend le code plus difficile à lire.this
ne rend PAS le code plus difficile à lire lmao.La réponse de @William Brendel a fourni trois cas d'utilisation différents de manière agréable.
Cas d'utilisation 1:
La page de documentation Java officielle à ce sujet fournit les mêmes cas d'utilisation.
Il couvre deux exemples:
Utiliser ceci avec un champ et utiliser ceci avec un constructeur
Cas d'utilisation 2:
Autre cas d'utilisation qui n'a pas été cité dans cet article:
this
peut être utilisé pour synchroniser l'objet actuel dans une application multithread pour protéger une section critique des données et méthodes.Cas d'utilisation 3:
L'implémentation du modèle Builder dépend de l'utilisation de
this
pour renvoyer l'objet modifié.Se référer à ce post
Garder le constructeur dans une classe distincte (interface fluide)
la source
Google a publié une page sur le site Sun qui en parle un peu.
Vous avez raison sur la variable;
this
peut en effet être utilisé pour différencier une variable de méthode d'un champ de classe.Cependant, je déteste vraiment cette convention. Donner deux variables différentes des noms littéralement identiques est une recette pour les bugs. Je préfère de beaucoup quelque chose comme:
Mêmes résultats, mais sans risque de bogue
x
auquel vous faites référence accidentellement alors que vous vouliez vraiment faire référence à lax
place.Quant à son utilisation avec une méthode, vous avez raison sur les effets; vous obtiendrez les mêmes résultats avec ou sans. Pouvez-vous l'utiliser? Sûr. Devriez-vous l'utiliser? À vous de voir, mais étant donné que je pense personnellement que c'est une verbosité inutile qui n'ajoute aucune clarté (à moins que le code ne soit rempli de déclarations d'importation statiques), je ne suis pas enclin à l'utiliser moi-même.
la source
Voici les façons d'utiliser «ce» mot-clé en java:
this
mot clé pour référencer les variables d'instance de classe actuellesthis()
pour appeler le constructeur de classe actuelthis
mot clé pour renvoyer l'instance de classe actuellethis
mot clé comme paramètre de méthodehttps://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
la source
lorsqu'il y a deux variables, une variable d'instance et une autre variable locale du même nom, nous l'utilisons. pour référencer l'objet en cours d'exécution afin d'éviter le conflit entre les noms.
la source
this
est une référence à l'objet courant. Il est utilisé dans le constructeur pour faire la distinction entre la variable de classe locale et la classe courante qui porte le même nom. par exemple:this
peut également être utilisé pour appeler un constructeur à partir d'un autre constructeur. par exemple:la source
Y aura-t-il une différence si j'utilise "x" au lieu de "this.x" dans certaines méthodes?
Généralement non. Mais cela fait parfois une différence:
Si j'utilise simplement "method ()", ne sera-t-il pas, par défaut, appliqué à l'objet courant?
Oui. Mais si nécessaire,
this.method()
clarifie que l'appel est fait par cet objet.la source
this
n'affecte pas le code résultant - c'est l'opérateur de temps de compilation et le code généré avec ou sans sera le même. Lorsque vous devez l'utiliser, cela dépend du contexte. Par exemple, vous devez l'utiliser, comme vous l'avez dit, lorsque vous avez une variable locale qui masque la variable de classe et que vous voulez faire référence à une variable de classe et non à une variable locale.edit: par "le code résultant sera le même" je veux dire bien sûr, quand une variable de portée locale ne cache pas celle appartenant à la classe. Donc
le code résultant des deux méthodes sera le même. La différence sera si une méthode déclare une variable locale avec le même nom
la source
En ce qui concerne les messages de William Brendel et la question dbconfessions , concernant le cas 2 . Voici un exemple:
J'ai vu cela utilisé lors de la construction de relations parent-enfant avec des objets. Cependant, veuillez noter qu'il est simplifié par souci de concision.
la source
«Ce» mot-clé en java est utilisé pour référencer les objets de classe actuels.
Il y a 6 utilisations du mot-clé «this» en java
réf: https://stacktraceguru.com/java/this-keyword-in-java
la source
Pour vous assurer que les membres de l'objet actuel sont utilisés. Dans les cas où la sécurité des threads est un problème, certaines applications peuvent modifier les valeurs de membre d'objets incorrectes, c'est pourquoi cela doit être appliqué au membre afin que la valeur de membre d'objet correcte soit utilisée.
Si votre objet n'est pas concerné par la sécurité des threads, il n'y a aucune raison de spécifier quelle valeur de membre d'objet est utilisée.
la source