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);
}
}
}
精彩评论