2011-01-09 14 views
25

Çalışma zamanında yürütülen yöntem adını bilmenin bir yolu olup olmadığını merak ediyordum? Örneğin, private void doSomething (String s) yönteminin içinde, doSomething (String s) yöntemini çalıştırdığımı bilmek isterim.Java'da bu yöntem içinden yöntem adı nasıl bulunur?

+1

Bu gerçekten kodunuzun gerektirmesi gereken bir şey değil. Tasarımınızı yeniden düşünmenizi öneririm, böylece ihtiyacınız olmaz. –

+1

Eğer bu yöntemin içinde iseniz, zaten adını biliyorsunuz, değil mi? :) Arayanın yönteminin adını bilmek istiyorsanız, Jigar'ın cevabı sizin aradığınız cevaptır. Sadece index olarak 0 yerine 1 kullanın. Arama yöntemleri adını almak için –

cevap

60

JDK1.5 olduğundan, stacktrace almak için bir özel durum gerekmez bakınız:

public class Test2 { 
    public static void main(String args[]) { 
     new Test2().doit(); 
    } 
    public void doit() { 
     System.out.println(
      Thread.currentThread().getStackTrace()[1].getMethodName()); // output : doit 
    } 
    } 
+0

Burada görmek güzel :) –

+1

Yığın almak için istisna oluşturmak zorunda olmadığınız için bu daha iyi bir çözümdür. – rfeak

+2

Bunun neden benim için çalışmadığından emin değilim ... Java 1.5 –

10
System.out.println(new Exception().getStackTrace()[0].getMethodName()); 

Ayrıca
sen Thread.currentThread().getStackTrace() ile alabilirsiniz,

+0

kullanınGetStacktrace() [1]. Biraz daha yararlı :) – Daniel

+0

çok güzel; Teşekkürler – JAM

+0

@Daniel, bunun için soruldu mu? 1) stackguranın doğru olduğu _guarantee_ yok, ve 2) bunun daha önce çok pahalı bir işlem olduğuna dikkat edin. Son JVM'lerde daha iyi olmalı. –

-2
Method lastMethodCalled = this.getClass().getEnclosingMethod(); 
+1

Bu onun için soruyordu yapmaz. Bkz [Bu link] (http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getEnclosingMethod()) – job

İlgili konular