Groovy中如何判断调用对象的数据类型?

How do you determine the data type of calling object in Groovy?

当我在Groovy中调用函数时,如何确定调用者的class?

例如,我想知道 foo 的 class 是什么,在 printFoo() 函数中:

foo.printFoo()

def printFoo() {
  print(this.class)
}

这应该打印出 foo

的 class

我不知道任何 Groovy 特定的方式,但您可以使用 object.getClass().name 获得 class 名称。这就是您要找的吗?

如果你想检查一个对象是否实现了一个特定的接口或扩展了一个特定的class(例如日期)使用:

object instanceof Date

或者检查对象的 class 是否恰好是特定的 class(不是它的子class),使用:

object.getClass() == Date

还有 in 运算符:object in Date

该语言和运行时未提供可靠的机制来执行您所要求的操作。您可以做一些 pokey jiggery 检查堆栈帧,但那是非常详细的底层内容,并且由于多种原因并不可靠。简短的回答是,语言不支持它。