當我在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