17

http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undoneによると

  1. プロパティのようなオブジェクトのタイプへのアクセス

.getClass()の代わりに.classを使用することは問題ありません-あなたが持っているオブジェクトの種類を正確に知っている限り。しかし、それなら、それはまったく必要ありません。そうしないと、オブジェクトのクラスではなく、nullなどが発生するリスクがあります。

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

誰かがこれがなぜであるか説明できますか?なぜ.class異なるものを返すのですかgetClass()

4

2 に答える 2

23

aはマップであるためa.class、Groovyでは。と同じa.get( "class" )です。ドキュメントの例でわかるように、これはnullを返します。そのため、変数がマップにならないことが絶対に確実でない限り、ルールはgetClassを使用する傾向があります。

于 2012-07-16T22:06:35.380 に答える
9

マップ以外の例は、型のクラスとインスタンスのクラスの違いです。インスタンスの.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
于 2014-11-20T11:40:44.857 に答える