2012-01-23 41 views
6

您好有一種方法可以知道函數的調用者類名,特別是對於Java-GWT應用程序嗎?如何知道函數的調用者類

+0

可能重複的[Java:Find Caller Class](http://stackoverflow.com/questions/2887607/java-find-調用者類) –

+1

反射和相關API不由GWT模擬。你需要找到另一種方式來實現你想要的。 – Strelok

回答

4

Thread.currentThreadGWT支持(請記住,Java代碼被編譯成JavaScript),所以這是一個可能重複:

How do you find out the caller function in JavaScript?

在GWT你只要寫一個JSNI包裝:

public static native void whosMyCaller() /*-{ 
    $wnd.alert(arguments.callee.caller.toString()); 
}-*/; 
+0

我將如何採用代碼來獲得使用GWT的被調用者? – xybrek

+0

有沒有「實用」功能來做到這一點? – xybrek

+0

在GWT(2.4.0)中沒有這樣的'實用工具',你可以簡單地做一個jsni方法 – milan

0

這在GWT中並不是真的可行,因爲在生產模式下代碼經過嚴格優化,內嵌和刪除不可訪問的代碼。例如。在編譯模式下,大多數函數不屬於任何類,因爲GWT認爲類定義是冗餘的。從理論上講,可以找到調用者類(如果你嘗試分析編譯報告或者通過JSNI),但是由於內部優化,你會得到很多奇怪的結果(例如,即使你的函數只在一些在編譯模式下,您可能會發現它直接從入口點onLoad方法調用)

+0

在字節碼中可能嗎? – xybrek

+0

你的意思是正常的java?可以像其他人說的那樣通過Thread.currentThread()。getStackTrace()來實現。在DevMode中,這也是可能的,但我不確定在DevMode中是否允許Thread類。您可以嘗試創建一個Exceptino並分析它的堆棧跟蹤。 – jusio

相關問題