为什么可以在类的字段声明中编写this.class
,它实际上会执行预期的操作?
E.g:
private static final logger = Logger.getLogger(this.class)
P.S。:似乎是Schroedinbug的好地方。 :)
答案 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)