2011-07-13 2 views
1

Comment se fait-il qu'il est possible d'écrire this.class dans la déclaration des champs d'une classe et il fera réellement ce qui est attendu?Comment se fait ce code fonctionne dans groovy?

.: par exemple

private static final logger = Logger.getLogger(this.class) 

P.S .: On dirait un endroit idéal pour Schroedinbug. :)

Répondre

11

Groovy this est lié à la classe dans un contexte statique, et vous pouvez appeler des méthodes statiques sur elle. Logger.getLogger(this.class) serait équivalent à seulement Logger.getLogger(Class).

class C { 
    static final staticThis = this 
    static final thisClass = this.getClass() 
    static final someResult = this.someMethod() 

    static someMethod() { 'static' } 
} 

assert C.staticThis == C.class 
assert C.thisClass == Class 
assert C.someResult == C.someMethod() 
+1

Groovy est en fait pleine de surprises. Utilisé this.class pour chaque classe et seulement après un certain temps il a commencé à indiquer que this.class pourrait ne pas être pertinent. –

1

La réponse de Justin est correcte, dans un contexte statique this est lié à l'objet Class de la classe actuelle, donc, vous pouvez remplacer le code ci-dessus:

private static final logger = Logger.getLogger(this) 

que vous pouvez en toute sécurité copie -passer d'une classe à l'autre, contrairement à:

private static final logger = Logger.getLogger(MyClass.class)