2010-08-08 22 views

Respuesta

55

home.This

Home.this refiere a la instancia actual de la clase Home.

El término formal para esta expresión parece ser el Qualified this, como se menciona en la Sección 15.8.4 de la Especificación del lenguaje Java.

En una clase simple, decir Home.this y this será equivalente. Esta expresión solo se usa en casos donde hay una clase interna, y uno necesita referirse a la clase adjunta.

Por ejemplo:

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 volverá la representación de la clase Home como un objeto Class.

El término formal para esta expresión es class literal, como se menciona en la Sección 15.8.2 de la Especificación del lenguaje Java.

En la mayoría de los casos, esta expresión se usa cuando se usa reflection, y necesita una forma de referirse a la clase en sí misma en lugar de una instancia de la clase.

+0

¡Gran explicación! –

+0

¿Hay alguna manera similar de hacer esto en C# también? – moorara

+0

@MiladIrannejad No como NestingClass.this. Ver http://stackoverflow.com/a/185144/1986241 – Suzi

4

Home.class devuelve la instancia de java.lang.Class<Home> que corresponde a la clase Home. Este objeto le permite reflexionar sobre la clase (averiguar qué métodos y variables tiene, cuál es su clase principal, etc.) y crear instancias de la clase.

Home.this solo tiene sentido si se encuentra dentro de una clase anidada de Inicio. Aquí Home.this devolverá el objeto de la clase Home en el que está anidado el objeto de la clase anidada.