2015-03-31 29 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