2014-05-22 27 views
5

sun.reflect.Reflection.getCallerClass jdk8 kaldırıldığını yanasun.reflect.Reflection.getCallerClass alternatif

(Orada kendisi için yeterli açıklamayı itibar yoktu gibi) How do I find the caller of a method using stacktrace or reflection? itibaren ne olabilir bir alternatif?

Nasıl sun.misc.SharedSecrets yukarıdaki yorumlar bahsedildiği gibi

JavaLangAccess access = SharedSecrets.getJavaLangAccess(); 
    Throwable throwable = new Throwable(); 
    int depth = access.getStackTraceDepth(throwable); 
    StackTraceElement frame = access.getStackTraceElement(throwable, depth); 
+0

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace() öğesini deneyin ('Thread.getStackTrace' değerini döndüreceğini ve geçerli yöntemi ilk 2 yığın öğesi) – DankMemes

+0

Tüm yığın izinin oluşturulmasına neden olacak, çok verimsiz. Sadece çerçeveye belli bir derinlikte erişmek istiyorum. Aslında, önerdiğim alternatif, muhtemelen tam yığın izini de yaratacaktır. Emin değilim. –

+1

'sun. '' Paketlerini kullanmaktan sakınmak isterim çünkü tüm platformlarda ve java konfigürasyonlarında olmayacaklar. Ayrıca, tüm yığın izlemenin neden verimli olmaması gerekir? Yığında çok fazla şeyin var mı, yoksa buna yüksek oranda mı ihtiyacınız var? Gerçekten bir fark yaratmazsa verim hakkında endişelenme – DankMemes

cevap

1

kullanmayla ilgili. Yukarıda belirtildiği gibi, SharedSecrets.getJavaLangAccess() yöntemini kısa vadede kullanabileceğim sonucuna vardım, ancak güneşe olan bağımlılığı ortadan kaldırdık. * Paket tamamen uzun vadeli bir çözüm olarak.

Temelde, gereksinimimi kendim değiştiriyorum, böylece getCallerClass işlevi gerektirmez.