有可能知道哪个方法动态调用另一个方法吗?
见下文:
class a {
public void one(){
System.out.println(methodWhoCallsVoidOne().getName());
}
public void two(){
this.one();
}
}
答案 0 :(得分:6)
不是没有通过创建异常并将堆栈跟踪从它们中拉出来。
我会问你为什么要这样做?在过去人们问过这个问题时,几乎总是某个地方设计糟糕的迹象。
答案 1 :(得分:2)
或者您可以使用Thread.currentThread().getStackTrace()
答案 2 :(得分:0)
你可以获得一个堆栈跟踪:
new Throwable().getStackTrace()
它返回第一个调用者的数组。
答案 3 :(得分:0)
如果您使用的是Eclipse等IDE,则可以放置一个断点并查看调用堆栈。 Quck google搜索java调用堆栈,调高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);
}
}
}