当我在Groovy中调用函数时,如何确定调用者的类?您如何确定Groovy中调用对象的数据类型?
例如,我想知道是什么类的foo
是,在printFoo()
函数内部:
foo.printFoo()
def printFoo() {
print(this.class)
}
,这应该打印出类foo
当我在Groovy中调用函数时,如何确定调用者的类?您如何确定Groovy中调用对象的数据类型?
例如,我想知道是什么类的foo
是,在printFoo()
函数内部:
foo.printFoo()
def printFoo() {
print(this.class)
}
,这应该打印出类foo
语言和运行时不要提供一个可靠的机制去做你所问的事情。你可以做一些pokey jiggery检查堆栈帧,但这是非常详细的低层次的东西,并不会因为多种原因而真正可靠。简而言之,该语言不支持它。
我不知道任何特定于Groovy的方式,但您可以通过object.getClass().name
获取类名。那是你在找什么?
如果你想检查是否一个对象实现一个特定的接口或者扩展特定类(如日期)使用方法:
object instanceof Date
,或者检查类的对象恰好是一个特定的类(不它的一个子类),可以使用:
object.getClass() == Date
另外还有in
操作:object in Date
不确定Groovy特定,但Java提供了一种在[这个问题]中指定的方法(http://stackoverflow.com/questions/421280/how-do-i-find-the-caller-of-a -method-using-stacktrace-or-reflection) – christopher 2015-03-31 16:53:49
'this.getClass()。getName()'? – sebnukem 2015-03-31 17:26:42
@christopher该技术将会出现问题,特别是对于Groovy的动态调度,因为调用者和目标之间可能会有很多帧。 – 2015-04-01 12:16:38