How to find in a method being called, which class & method invoked it?

Home arrow Java Tutorials arrow Tips arrow How to find in a method being called, which class & method invoked it?
How to find in a method being called, which class & method invoked it? Print E-mail
User Rating: / 3
PoorBest 
Contributed by Howell   
Sunday, 04 June 2006

At times (chain-of-responsibilty pattern, debugging etc), it is very handy to know in a method being called, which method invoked it. For example You may have an inheritance class hierarchy , which has got a method overridden by its subclasses. Let us look at some sample code to see how this can be achieved using StackTraceElement and Throwable

The base caller class:

public class CallerBase {

public void methodC1() {
new Callee().doSomething();
}

public static void main(String[] args) {
CallerBase caller = new CallerBase();
caller.methodC1();

caller = new CallerSub();
caller.methodC1();
}
}

The subclass of the caller class:

public class CallerSub extends CallerBase {

public void methodC1() {
new Callee().doSomething();
}
}

finally the important part of the code which determines who invoked it:

public class Callee {

public void doSomething() {
Throwable t = new Throwable();
StackTraceElement[] elements = t.getStackTrace();

String calleeMethod = elements[0].getMethodName();
String callerMethodName = elements[1].getMethodName();
String callerClassName = elements[1].getClassName();

System.out.println("CallerClassName=" + callerClassName + " , Caller method name: " + callerMethodName);
System.out.println("Callee method name: " + calleeMethod);
}
}

If you run the class CallerBase then the output is:

CallerClassName=CallerBase , Caller method name: methodC1
Callee method name: doSomething
CallerClassName=CallerSub , Caller method name: methodC1
Callee method name: doSomething

-- from the author of the book "Java/J2EE Job Interview Companion" at http://www.lulu.com/java-success

  home              contact us

 

©2006-2008 DeveloperZone.biz   All rights reserved     powered by Mambo Designed by Siteground