2010-08-08 13 views

risposta

55

home.This

Home.this riferisce all'istanza corrente della classe Home.

Il termine formale per questa espressione sembra essere il Qualified this, come indicato nella Sezione 15.8.4 della Specifica del linguaggio Java.

In una classe semplice, dire Home.this e this sarà equivalente. Questa espressione viene utilizzata solo nei casi in cui è presente una classe interna e occorre fare riferimento alla classe che la include.

Ad esempio:

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 restituirà la rappresentazione della classe Home come oggetto Class.

Il termine formale per questa espressione è class literal, come indicato nella Sezione 15.8.2 della Specifica del linguaggio Java.

Nella maggior parte dei casi, questa espressione viene utilizzata quando si utilizza reflection e ha bisogno di un modo per fare riferimento alla classe stessa anziché a un'istanza della classe.

+0

Grande spiegazione! –

+0

C'è un modo simile per farlo anche in C#? – moorara

+0

@MiladIrannejad Non come NestingClass.questo. Vedi http://stackoverflow.com/a/185144/1986241 – Suzi

4

Home.class restituisce l'istanza di java.lang.Class<Home> che corrisponde alla classe Home. Questo oggetto ti permette di riflettere sulla classe (scopri quali metodi e variabili ha, quale è la sua classe genitrice ecc.) E per creare istanze della classe.

Home.this è significativo solo se ci si trova in una classe annidata di Home. Qui Home.this restituirà l'oggetto della classe Home in cui è nidificato l'oggetto della classe nidificata.