2012-01-23 3 views
6

Здравствуйте, есть ли способ узнать имя класса вызывающей функции, особенно для приложения Java-GWT?Как узнать класс вызывающего абонента функции

+0

Возможный дубликат [Java: найти класс вызывающего абонента] (http://stackoverflow.com/questions/2887607/java-find- caller-class) –

+1

Отражение и связанные с ним API не эмулируются GWT. Вам нужно найти другой способ выполнить то, что вы хотите. – Strelok

ответ

4

Thread.currentThread не поддерживается в GWT (помните, что 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 это также возможно, но я не уверен, разрешен ли класс Thread в DevMode. Вы можете попытаться создать Exceptino и проанализировать его стек. – jusio

Смежные вопросы