2012-07-16 26 views
14

不同的值根据http://groovy.codehaus.org/Things+you+can+do+but+better+leave+undone为什么常规的.class返回比.getClass()

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

使用的.class代替.getClass的()没问题 - 只要你知道你有什么样的对象。但是,那么你不需要在 所有。否则,你可能会遇到空或其他东西, 而不是对象的类。

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

有人可以解释为什么这是?为什么.class回报的东西比getClass()

回答

16

不同,因为当a是地图,a.class是在Groovy为a.get("class")相同。正如你在文档中的例子中看到的,这将返回null。这就是为什么规则的趋势是使用getClass,除非你绝对确定变量不会是地图

+0

啊,我看。所以它是专门映射(和任何类似的)。 – 2012-07-16 22:29:56

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 
相关问题