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

Jef*_*rey 15 groovy

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

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

使用.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,除非你绝对确定变量不是地图


kin*_*iko 6

非映射示例是类型的类与实例的类之间的差异.实例的.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)