public class StackTraceStudy {
public static void main(String[] args) throws Exception {
new StackTraceStudy().invoke();
}
public void method(){
for(StackTraceElement stackTraceElement:Thread.currentThread().getStackTrace())
System.out.println(stackTraceElement.getClassName()+'.'+stackTraceElement.getMethodName());
}
public void invoke() throws Exception {
StackTraceStudy stackTraceStudy =new StackTraceStudy();
java.lang.reflect.Method method= stackTraceStudy.getClass().getMethod("method");
method.invoke(stackTraceStudy);
}
}
/**output
java.lang.Thread.getStackTrace
aop.StackTraceStudy.method
sun.reflect.NativeMethodAccessorImpl.invoke0
sun.reflect.NativeMethodAccessorImpl.invoke
sun.reflect.DelegatingMethodAccessorImpl.invoke
java.lang.reflect.Method.invoke
aop.StackTraceStudy.invoke
aop.StackTraceStudy.main
sun.reflect.NativeMethodAccessorImpl.invoke0
sun.reflect.NativeMethodAccessorImpl.invoke
sun.reflect.DelegatingMethodAccessorImpl.invoke
java.lang.reflect.Method.invoke
com.intellij.rt.execution.application.AppMain.main
*/
例如有的时候我都是通过stackTrace来获取调用者的信息,但是这个方法不支持反射,
要么把被调用的方法做的更智能点,但这样更麻烦(也更容易出错)
要么提供一个方法,让调用者把信息传进来