2012-07-16 11 views
14

http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undoneなぜグルービーの.classが(.getClass異なる値を返すことはない)

プロパティなど、オブジェクトの種類にアクセスする

によると.classファイルの使用の代わりに.getClass() あなたが持っているオブジェクトの種類が正確にわかっている限り、大丈夫です。しかし、あなたはそれを allで必要としません。そうしないと、ヌルまたは何か他のものが得られる危険にさらされますが、 オブジェクトのクラスは実行されません。

a = [:] println a.class.simpleName // a.classがnullであるため、NullPointerExceptionです。

これはなぜか説明できますか? aがマップされたときに、a.classa.get("class")としてGroovyで同じなので、なぜgetClass()

答えて

16

とは異なる.class戻り何かをします。ドキュメントの例でわかるように、これはnullを返します。そのため、変数がマップではないことが絶対にわからない限り、getClassを使用する傾向があります。

+0

ああ、なるほど。だからマップに特化しています。 –

5

非マップの例は、型のクラスとインスタンスのクラスの違いです。 インスタンスの.classと.getClass()は型ですが、いくつかの例外があります。マップ。 型の.classが型です。タイプの .getClass()は、例えばのjava.lang.Class

ある:

def a = Integer.getClass() 
def b = Integer.class 
def c = 1.getClass() 
def d = 1.class  

println a 
println b 
println c 
println d 

出力与える:

class java.lang.Class 
class java.lang.Integer 
class java.lang.Integer 
class java.lang.Integer 
関連する問題