2011-07-13 25 views
1

如何才能在類的字段聲明中編寫this.class並且它實際上可以實現預期的效果?這段代碼如何在groovy中工作?

例如爲:

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

P.S:似乎是Schroedinbug的好地方。 :)

回答

11

在Groovy this被綁定到靜態上下文中的類,你可以調用它的靜態方法。 Logger.getLogger(this.class)將相當於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其實充滿了驚喜。對於每個類都使用this.class,只是在一段時間後纔開始指出this.class可能不相關。 –

1

Justin的答案是正確的,在靜態情況下this綁定到當前類的Class對象,因此,您可以替換上面代碼:

private static final logger = Logger.getLogger(this) 

可以放心地複製不同於:

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