2012-01-23 13 views
6

こんにちは、関数の呼び出し元クラス名、特にJava-GWTアプリケーションを知る方法はありますか?関数の呼び出し元クラスを知る方法

+0

[Java:Find Caller Class]の可能な複製(http://stackoverflow.com/questions/2887607/java-find- caller-class) –

+1

反射と関連APIはGWTでエミュレートされません。あなたはあなたが望むものを達成する別の方法を見つける必要があります。 – Strelok

答えて

4

Thread.currentThreadは、(JavaコードをJavaScriptにコンパイルされることを覚えておいてください)GWTでサポートされているので、これはの可能重複していません。

:GWTで

How do you find out the caller function in JavaScript?

あなたは単に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

関連する問題