2012-01-23 18 views
6

Witam, czy istnieje sposób na poznanie nazwy klasy wywołującej funkcję, w szczególności dla aplikacji Java-GWT?Jak poznać klasę wywołującą funkcję

+0

możliwy duplikat [Java: Find Caller Class] (http://stackoverflow.com/questions/2887607/java-find- klasa wywołująca) –

+1

Refleksja i pokrewne API nie są emulowane przez GWT. Musisz znaleźć inny sposób na osiągnięcie tego, co chcesz. – Strelok

Odpowiedz

4

Thread.currentThread nie jest obsługiwana w GWT (należy pamiętać, że kod Java zostanie skompilowany do JavaScript), więc jest to możliwe duplikat:

How do you find out the caller function in JavaScript?

W GWT chcesz po prostu napisać jsni opakowanie:

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

Jak zaadoptować kod, aby uzyskać gościa z GWT? – xybrek

+0

Czy jest jakaś funkcja "narzędzie" do tego? – xybrek

+0

Nie ma takiego "narzędzia" w GWT (2.4.0), można po prostu zrobić metodę jsni – milan

0

W GWT nie jest to naprawdę możliwe, ponieważ w trybie produkcji kod jest mocno zoptymalizowany poprzez włożenie i usunięcie nieosiągalnego kodu. Na przykład. w trybie kompilacji większość funkcji nie należy do żadnej klasy, ponieważ GWT uznał definicję klasy za zbyteczną. Teoretycznie możliwe jest znalezienie klasy wywołującej (jeśli próbujesz analizować raport kompilacji lub przez JSNI), ale z powodu optymalizacji in-line otrzymasz wiele dziwnych wyników (na przykład, nawet jeśli funkcja jest wywoływana tylko w niektórych konkretna klasa, w trybie kompilacji może się okazać, że jest bezpośrednio wywoływana z punktu wejścia w metodzie OnLoad)

+0

W bajtodzie jest to możliwe? – xybrek

+0

You meannormal java? jest to możliwe za pośrednictwem Thread.currentThread(). getStackTrace(), jak powiedzieli inni ludzie. W DevMode może to być również możliwe, ale nie jestem pewien, czy klasa Thread jest dozwolona w DevMode. Możesz spróbować stworzyć Exceptino i przeanalizować jego stacktrace. – jusio

Powiązane problemy