120 votes

Java : Class.this

J’ai un Java programmer qui ressemblent à ceci.

Que signifie « LocalScreen.this » signifie en aFuncCall ?

182voto

aioobe Points 158466

se réfère à de la classe englobante.

Cet exemple devrait l’expliquer :

Sortie :

59voto

SLaks Points 391154

Cela signifie que le instance de l’outer classe.

Écrire `` sans un qualificateur retourne l’instance de la classe interne qui l’appel est à l’intérieur de.

14voto

TofuBeer Points 32441

Le compilateur prend le code et fait quelque chose comme ça:

public class LocalScreen 
{
    public void method() 
    {
        new LocalScreen$1().run;
    }

    public String toString() 
    {
        return "A LocalScreen object"; 
    }

    public void onMake(LocalScreen ls) { /* ... */ }

    public static void main(String[] args) 
    {
        new LocalScreen().method();
    }
}

class LocalScreen$1
     extends Runnable
{
    final LocalScreen $this;

    LocalScreen$1(LocalScreen $this)
    {
        this.$this = $this;
    }

    public void run() 
    {
        // Prints "An anonymous Runnable"
        System.out.println(this.toString());

        // Prints "A LocalScreen object"
        System.out.println($this.toString());

        // Won't compile! 'this' is a Runnable!
        //onMake(this);

        // Compiles! Refers to enclosing object
        $this.onMake($this);
    }

    public String toString() 
    {
        return "An anonymous Runnable!";
    }
}

Comme vous pouvez le voir, lorsque le compilateur prend un intérieur de classe il la convertit à l'extérieur de la classe (c'était une décision de conception faite il y a LONGTEMPS, de sorte que le VMs n'a pas besoin d'être changé pour comprendre les classes internes).

En cas de non-statique à l'intérieur de la classe est faite, il a besoin d'une référence à la société mère, de sorte qu'il peut appeler des méthodes/accès aux variables de l'extérieur de la classe.

La ce à l'intérieur de ce qui était à l'intérieur de la classe n'est pas le bon type, vous devez accéder à l'extérieur de la classe pour obtenir le bon type de l'appel de la onMake méthode.

13voto

NawaMan Points 10266

``permet d’accéder à l’instance de la classe externe. Voir l’exemple suivant.

Ensuite vous recevrez.

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