2010-08-08 10 views

Répondre

55

home.This

Home.this fait référence à l'instance actuelle de la classe Home.

Le terme formel pour cette expression semble être Qualified this, comme référencé dans la Section 15.8.4 de la spécification de langage Java.

Dans une classe simple, l'expression Home.this et this sera équivalente. Cette expression n'est utilisée que dans les cas où il existe une classe interne, et il faut se référer à la classe englobante.

Par exemple:

class Hello { 
    class World { 
    public void doSomething() { 
     Hello.this.doAnotherThing(); 
     // Here, "this" alone would refer to the instance of 
     // the World class, so one needs to specify that the 
     // instance of the Hello class is what is being 
     // referred to. 
    } 
    } 

    public void doAnotherThing() { 
    } 
} 

Home.class

Home.class retournera la représentation de la classe Home comme un objet Class.

Le terme formel pour cette expression est class literal, comme référencé dans la Section 15.8.2 de la spécification du langage Java.

Dans la plupart des cas, cette expression est utilisée lorsque l'on utilise reflection et nécessite un moyen de faire référence à la classe elle-même plutôt qu'à une instance de la classe.

+0

Grande explication! –

+0

Existe-t-il une manière similaire de faire cela en C# aussi? – moorara

+0

@MiladIrannejad Pas comme NestingClass.this. Voir http://stackoverflow.com/a/185144/1986241 – Suzi

4

Home.class renvoie l'instance de java.lang.Class<Home> correspondant à la classe Home. Cet objet vous permet de réfléchir sur la classe (connaître les méthodes et les variables qu'elle contient, sa classe parente, etc.) et de créer des instances de la classe.

Home.this n'a de sens que si vous êtes dans une classe imbriquée de Home. Ici Home.this retournera l'objet de la classe Home que l'objet de la classe imbriquée est imbriquée.