为什么这段代码在groovy中有效?

时间:2011-07-13 16:34:28

标签: groovy

为什么可以在类的字段声明中编写this.class,它实际上会执行预期的操作?

E.g:

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

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

Justin的回答是正确的,在静态上下文this绑定到当前类的Class对象,因此,您可以用以下代码替换上面的代码:

private static final logger = Logger.getLogger(this)

,您可以安全地从一个类复制粘贴到另一个类,不像:

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