根据http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undone
- 像属性一样访问对象的类型
醇>使用.class而不是.getClass()是可以的 - 只要你知道 究竟是什么样的对象。但是你不需要那样做 所有。否则,你冒着获得null或其他东西的风险, 但不是对象的类。
a = [:] println a.class.simpleName // NullPointerException,因为 a.class为null。
有人可以解释为什么会这样吗?为什么.class
会返回与getClass()
答案 0 :(得分:21)
因为当a
是地图时,a.class
在Groovy中与a.get( "class" )
相同。正如您在文档中的示例中所看到的,这将返回null。这就是为什么规则趋向于使用getClass,除非你绝对确定变量不是地图
答案 1 :(得分:6)
非映射示例是类型的类与实例的类之间的差异。 实例的.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