2015-03-31 49 views
2

当我在Groovy中调用函数时,如何确定调用者的类?您如何确定Groovy中调用对象的数据类型?

例如,我想知道是什么类的foo是,在printFoo()函数内部:

foo.printFoo() 

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

,这应该打印出类foo

+0

不确定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

+0

'this.getClass()。getName()'? – sebnukem 2015-03-31 17:26:42

+2

@christopher该技术将会出现问题,特别是对于Groovy的动态调度,因为调用者和目标之间可能会有很多帧。 – 2015-04-01 12:16:38

回答

1

语言和运行时不要提供一个可靠的机制去做你所问的事情。你可以做一些pokey jiggery检查堆栈帧,但这是非常详细的低层次的东西,并不会因为多种原因而真正可靠。简而言之,该语言不支持它。

3

我不知道任何特定于Groovy的方式,但您可以通过object.getClass().name获取类名。那是你在找什么?

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

object instanceof Date 

,或者检查类的对象恰好是一个特定的类(不它的一个子类),可以使用:

object.getClass() == Date 

另外还有in操作:object in Date

+0

我的问题与调用函数的对象的类更相关,所以如果foo调用printFoo(),那么如何在printFoo()内部访问foo的类? – reectrix 2015-03-31 17:50:40

+0

然后你的例子应该工作。它有什么错误或问题? – sebnukem 2015-03-31 17:55:37

+0

啊,好的。我不确定它是否正确的语法/形式。谢谢! – reectrix 2015-03-31 18:22:57