【问题标题】:Why does groovy .class return a different value than .getClass()为什么 groovy .class 返回与 .getClass() 不同的值
【发布时间】:2012-07-16 21:39:39
【问题描述】:

根据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() 不同

【问题讨论】:

    标签: groovy


    【解决方案1】:

    因为a 是映射时,a.class 在 Groovy 中与 a.get( "class" ) 相同。正如您在文档中的示例中看到的那样,这将返回 null。这就是为什么规则趋向于使用 getClass 的原因,除非您绝对确定变量不会是地图

    【讨论】:

    • 啊,我明白了。所以它特定于地图(以及任何类似的东西)。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多