どのようにして、this.class
をクラスのフィールド宣言に書くことができますか。それは実際に何が期待されているのでしょうか?このコードはどのようにGroovyで動作しますか?
例えば:
private static final logger = Logger.getLogger(this.class)
P.Sは:Schroedinbugのための素晴らしい場所のように思えます。 :)
どのようにして、this.class
をクラスのフィールド宣言に書くことができますか。それは実際に何が期待されているのでしょうか?このコードはどのようにGroovyで動作しますか?
例えば:
private static final logger = Logger.getLogger(this.class)
P.Sは:Schroedinbugのための素晴らしい場所のように思えます。 :)
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()
ジャスティンの答えは現在のクラスのClass
オブジェクトにバインドされ、したがって、あなたが持つ上記のコードを置き換えることができ、静的文脈this
で、正しいです:
private static final logger = Logger.getLogger(this)
-
private static final logger = Logger.getLogger(MyClass.class)
とは異なり、あるクラスから別のクラスにペーストします。実際にはGroovyには驚きがたくさんあります。すべてのクラスに対してthis.classを使用し、しばらくしてからthis.classが無関係かもしれないことを指摘し始めました。 –