364 votes

Quand dois-je utiliser « cela » dans une classe ?

Je sais qu' this se réfère à un objet courant. Mais je ne sais pas quand j'ai vraiment besoin de l'utiliser. Par exemple, il y a une différence si j'utilise x au lieu de this.x dans certaines de ces méthodes? Peut-être x fera référence à une variable qui est local pour la méthode? Je veux dire la variable qui n'est perçue que dans cette méthode.

Qu'en this.method()? Puis-je l'utiliser? Devrais-je l'utiliser. Si je viens d'utiliser method(), ne serait-il pas, par défaut, appliquée à l'objet en cours?

467voto

William Brendel Points 15453

L' this mot-clé est utilisé principalement dans trois situations. La première et la plus commune est dans le setter de lever l'ambiguïté de références à des variables. La deuxième, c'est quand il est nécessaire de passer le courant instance de classe comme un argument à une méthode d'un autre objet. Le troisième est aussi un moyen d'appeler suppléant constructeurs à partir de l'intérieur d'un constructeur.

Exemple de Cas 1: à l'Aide de this de lever l'ambiguïté de références à des variables. En Java, setter, nous avons souvent passer dans une querelle avec le même nom que la variable membre privée, nous tentons de définir. Nous avons ensuite attribuer l'argument x de this.x.

public class Foo {

    private String name;

    // ...

    public void setName(String name) {
        // This makes it clear that you are assigning 
        // the value of the parameter "name" to the 
        // instance variable "name".
        this.name = name;
    }

    // ...
}

Exemple de Cas 3: à l'Aide de this d'appel suppléant constructeurs. Dans les commentaires, trinithis correctement souligné une autre utilisation courante de this. Lorsque vous avez plusieurs constructeurs pour une seule classe, vous pouvez utiliser this(arg0, arg1, ...) pour appeler un autre constructeur de votre choix, si vous le faites dans la première ligne de votre constructeur.

class Foo {

    public Foo() {
        this("Some default value for bar");

        // Additional code here will be executed 
        // after the other constructor is done.
    }

    public Foo(String bar) {
        // Do something with bar
    }

    // ...
}

J'ai aussi vu des this utilisé pour souligner le fait qu'une variable d'instance est d'être référencé (sans la nécessité pour la désambiguïsation), mais c'est un cas rare à mon avis.

81voto

Christopher Oezbek Points 2691

La deuxième utilisation importante de `` (à côté de se cacher avec une variable locale autant de réponses déjà dire) est lorsque vous accédez à une instance extérieure d’une classe non statique imbriquée :

51voto

froadie Points 15184

Vous ne devez utiliser `` - et la plupart des gens ne l’utiliser - lorsqu’il y a une variable locale qui se chevauchent avec le même nom. (Méthodes setter, par exemple.)

Bien sûr, une autre bonne raison d’utiliser `` est qu’il provoque intellisense s’affiche dans IDEs  :)

32voto

Adam Robinson Points 88472

Le seul besoin d’utiliser la qualificateur est quand une autre variable dans la portée actuelle partage le même nom et vous souhaitez faire référence au membre d’instance (comme William décrit). En dehors de cela, il n’y a aucune différence de comportement entre et `` .

15voto

Benjamin Points 91

« Cela » est également utile lorsque vous appelez un constructeur de l’autre :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X