为什么groovy .class返回的值不同于.getClass()

时间:2012-07-16 21:39:39

标签: groovy

根据http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undone

  
      
  1. 像属性一样访问对象的类型
  2.         

    使用.class而不是.getClass()是可以的 - 只要你知道   究竟是什么样的对象。但是你不需要那样做   所有。否则,你冒着获得null或其他东西的风险,   但不是对象的类。

         

    a = [:] println a.class.simpleName // NullPointerException,因为   a.class为null。

有人可以解释为什么会这样吗?为什么.class会返回与getClass()

不同的内容

2 个答案:

答案 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