17

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

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

使用 .class 而不是 .getClass() 是可以的——只要你确切地知道你拥有什么样的对象。但是你根本不需要那个。否则,您将面临获得 null 或其他内容的风险,而不是对象的类。

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

有人可以解释这是为什么吗?为什么.class返回的东西不同于getClass()

4

2 回答 2

23

因为 whena是一个映射,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 回答