2011-07-13 12 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

ジャスティンの答えは現在のクラスのClassオブジェクトにバインドされ、したがって、あなたが持つ上記のコードを置き換えることができ、静的文脈thisで、正しいです:

あなたが安全にコピーすることができ
private static final logger = Logger.getLogger(this) 

-

private static final logger = Logger.getLogger(MyClass.class) 
関連する問題