카테고리 없음

Get the current method name

neokido 2009. 6. 22. 13:47

Get the current method name

JDK1.4
public class MyTest {
    public static void main(String args[]) {
      new MyTest().doit();
    }
    public void doit() {
      System.out.println
         (new Exception().getStackTrace()[0].getMethodName());
    }
}
The output
doit
JDK1.5
While the above snippet is not bad, it is expensive since we need to create an Exception.

With JDK1.5, a new technique is available.

public class Test {
 public static void main(String args[]) {
    trace(Thread.currentThread().getStackTrace());
    new Test().doit();
    trace(Thread.currentThread().getStackTrace());
 }
 public void doit() {
    trace(Thread.currentThread().getStackTrace());
    doitagain();
  }
 public void doitagain() {
    trace(Thread.currentThread().getStackTrace());
  }

 public static void trace(StackTraceElement e[]) {
   boolean doNext = false;
   for (StackTraceElement s : e) {
       if (doNext) {
          System.out.println(s.getMethodName());
          return;
       }
       doNext = s.getMethodName().equals("getStackTrace");
   }
 }
}

main
doit
doitagain
main
To get the calling method
public class Test {
 public static void main(String args[]) {
    new Test().doit();
 }
 public void doit() {
    System.out.println(
       Thread.currentThread().getStackTrace()[3].getMethodName());
 }
}
 
출처  : http://www.rgagnon.com/javadetails/java-0420.html