开发者

Java Calling a Method

Is it possible how to know which method call another dynamically?.

See below:

class a {
       public void one(){
          System.out.println(methodWhoCallsVoidOne().getName());
        }

    开发者_如何学JAVA   public void two(){
          this.one();
       }
 }


Not without hacking around with creating exceptions and pulling the stacktraces out of them.

I would question why you want to do this? In the past when people have asked this it has almost always been a sign of a bad design somewhere.


Or you can use Thread.currentThread().getStackTrace()


You can get a stacktrace:

new Throwable().getStackTrace()

It returns an array of all callers from the first one.


If you are using an IDE such as Eclipse, you could place a break point and look at the call stack. Quck google search on java call stack, turned up this:

public class WhoCalledMe {
 public static void main(String[] args) {
  f();
 }

 public static void f() {
     g();
 }

 public static void g() {
     showCallStack();
     System.out.println();
     System.out.println("g() was called by "+whoCalledMe());
 }

 public static String whoCalledMe() {
     StackTraceElement[] stackTraceElements =
     Thread.currentThread().getStackTrace();
     StackTraceElement caller = stackTraceElements[4];
     String classname = caller.getClassName();
     String methodName = caller.getMethodName();
     int lineNumber = caller.getLineNumber();
     return classname+"."+methodName+":"+lineNumber;
 }

 public static void showCallStack() {
     StackTraceElement[] stackTraceElements =
     Thread.currentThread().getStackTrace();
     for (int i=2 ; i<stackTraceElements.length; i++) {
          StackTraceElement ste = stackTraceElements[i];
          String classname = ste.getClassName();
          String methodName = ste.getMethodName();
          int lineNumber = ste.getLineNumber();
          System.out.println(classname+"."+methodName+":"+lineNumber);
     }
  }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜