我有class X
,其中有一个名为static
的{{1}}方法,我有几个其他类,其方法由于某种原因调用doStuff()
。有没有办法让doStuff()
中的print方法打印出来的方法和类?
答案 0 :(得分:4)
是:new Throwable().getStackTrace()
返回StackTraceElement
数组。索引号1是您的来电者。
答案 1 :(得分:2)
/**
* <li> 0 dumpThreads
* <li> 1 getStackTrace
* <li> 2 getCallingMethodName
* <li> 3 [calling method]
*
* @return
*/
private String getCallingMethodName() {
return Thread.currentThread().getStackTrace()[3].getMethodName();
}
答案 2 :(得分:1)
您可以使用以下方式获取调用者类:
package test;
class TestCaller {
public static void meth() {
System.out.println("Called by class: " + sun.reflect.Reflection.getCallerClass(2));
}
}
public class Main {
public static void main(String[] args) {
TestCaller.meth();
}
}
输出:“按类调用:class test.Main”
答案 3 :(得分:0)
为了做到这一点,您不需要强制 Exception
。检查这个类似的问题:
Is there a way to dump a stack trace without throwing an exception in java?