根据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()
tim*_*tes 21
因为什么时候a是地图,a.class在Groovy中是一样的a.get( "class" ).正如您在文档中的示例中所看到的,这将返回null.这就是为什么规则趋向于使用getClass,除非你绝对确定变量不是地图
非映射示例是类型的类与实例的类之间的差异.实例的.class和.getClass()是它的类型,但有一些例外,例如maps.类型的.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
Run Code Online (Sandbox Code Playgroud)
会给出输出:
class java.lang.Class
class java.lang.Integer
class java.lang.Integer
class java.lang.Integer
Run Code Online (Sandbox Code Playgroud)