2011-11-29 21 views
24

@はGroovyの項目名の前に何を意味しますか?私が直接アクセスすることはできませんprivateフィールドにアクセスすることができていますいくつかのクラスでは、のは、例えばComposedClosureてみましょう:Groovy @記号の前の記号

public class Person { 
    private String name 
} 

def u = new Person(name:"Ron") 
println [email protected] //Ron 
println u.name //Ron 

a = {2} >> {3} 
println [email protected] //first closure object 
println a.first //runtime error 
+1

プライベートフィールドにアクセスできるかどうかは、現在のGroovy実装では機能ではなく、バグです。あなたはバージョン2.0のバグを修正し、悪いOOのプラクティス –

+1

@Donそれは2.0の予定ではない、それは3.0にあるかもしれないが、私は陪審員として私の息を保持しないだろうバグか機能かはまだ分かりません;-) –

答えて

41

groovyのプロパティアクセサーの使用を無効にすることができます。あなたが書く場合:

println u.name 

groovyは自動的に生成されたgetter Person.getName()を呼び出します。あなたが書く場合:

println [email protected]name 

それはJavaのようにフィールドに直接行くでしょう。クロージャの場合は、firstフィールドはあるが、対応するgetFirstアクセサーはないようです。

Groovyマニュアルでは、direct field access operatorと記載されています。

6

それはあなたが直接フィールドにアクセスするのではなく、ゲッターを通過していることを意味します。

Groovy operator docsを参照してください。それ以上のことは言いませんが、おそらくそれを避ける以外。

ComposedClosureが失敗するのは、first(またはsecond)のゲッターがないからです。