Von How do I find the caller of a method using stacktrace or reflection?sun.reflect.Reflection.getCallerClass alternative
Da sun.reflect.Reflection.getCallerClass in jdk8, wurde entfernt, sein ein Was (wie ich nicht genug Ruf kommentieren dort selbst hatte) konnte Alternative?
Wie wäre es mit sun.misc.SharedSecrets
JavaLangAccess access = SharedSecrets.getJavaLangAccess();
Throwable throwable = new Throwable();
int depth = access.getStackTraceDepth(throwable);
StackTraceElement frame = access.getStackTraceElement(throwable, depth);
Versuchen Sie http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace() (beachten Sie, dass 'Thread.getStackTrace' zurückgegeben wird und die aktuelle Methode als Die ersten 2 Stack-Elemente) – DankMemes
Wenn das aufgerufen wird, wird der gesamte Stack-Trace erstellt, was sehr ineffizient ist. Ich möchte nur in bestimmten Tiefen auf den Rahmen zugreifen. Eigentlich, die Alternative, die ich vorgeschlagen habe, wird wahrscheinlich auch die vollständige Stack-Trace erstellen. Ich bin nicht sicher. –
Ich würde sagen, vermeiden Sie 'sun. *' Pakete, weil sie nicht auf allen Plattformen und Java-Konfigurationen da sein werden. Warum sollte der gesamte Stack-Trace ineffizient sein? Haben Sie viele Dinge im Stapel oder benötigen Sie diese mit hoher Geschwindigkeit? Mach dir keine Sorgen über die Effizienz, es sei denn, es macht einen Unterschied – DankMemes