2012-01-23 33 views
6

Hola, ¿hay alguna forma de conocer el nombre de clase de la persona que llama, específicamente para una aplicación Java-GWT?Cómo saber la clase de llamante de una función

+0

posible duplicado de [Java: Find Caller Class] (http://stackoverflow.com/questions/2887607/java-find- caller-class) –

+1

GWT no emula la reflexión y las API relacionadas. Necesitas encontrar otra forma de lograr lo que quieres. – Strelok

Respuesta

4

Thread.currentThread no está soportada en GWT (recordemos que el código Java se compila a JavaScript), por lo que este es un posible duplicado de:

How do you find out the caller function in JavaScript?

En GWT que le escribe simplemente un envoltorio JSNI:

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

¿Cómo podría adoptar el código para llamar al destinatario con GWT? – xybrek

+0

¿Hay alguna función de "utilidad" para hacer eso? – xybrek

+0

no hay tal 'utilidad' en GWT (2.4.0), simplemente podría hacer un método jsni – milan

0

No es realmente posible en GWT, ya que en el modo de producción el código está muy optimizado con el revestimiento interior y la eliminación de código inalcanzable. P.ej. en modo compilado, la mayoría de las funciones no pertenecen a ninguna clase, ya que GWT consideró que la definición de clase era redundante. Teóricamente, es posible encontrar la clase de llamante (si intenta analizar el informe de compilación o si está a través de JSNI), pero debido a la optimización de alineación obtendrá muchos resultados extraños (por ejemplo, incluso si su función se llama solo en algunos clase específica, en modo compilado, puede encontrar que se llama directamente desde el punto de entrada método onLoad)

+0

¿En bytecode es posible? – xybrek

+0

¿Quieres decirnormal java? es posible a través de Thread.currentThread(). getStackTrace() como dijeron otras personas. En DevMode esto también podría ser posible, pero no estoy seguro de si la clase Thread está permitida en DevMode. Puede intentar crear un Exceptino y analizar su stacktrace. – jusio

Cuestiones relacionadas