private static final String FQCN = Util.class.getName();
StackTraceElement[] stack = new Throwable().getStackTrace();
String sourceClassName = null;
String sourceMethodName = null;
boolean found = false;
for (StackTraceElement element : stack) {
String className = element.getClassName();
if (FQCN.equals(className)) {
found = true;
} else if (found) {
sourceClassName = className;
sourceMethodName = element.getMethodName();
break;
}
}
setSourceClassName(sourceClassName);
setSourceMethodName(sourceMethodName);
跟
StackTraceElement[] stack = new Throwable().getStackTrace();
String sourceClassName = null;
String sourceMethodName = null;
for (StackTraceElement element : stack) {
String className = element.getClassName();
if (FQCN.equals(className)) {
sourceClassName = className;
sourceMethodName = element.getMethodName();
break;
}
}
setSourceClassName(sourceClassName);
setSourceMethodName(sourceMethodName);
这两段代码在意义上有什么区别?第一段代码,如果只有当前类的话,不永远进不了第二个判断里面,这样有做的意义在哪里?
第一段是找FQCN的下一个StackTraceElement的class,
第二段是找FQCN的class。
第一段的逻辑用于查找最后一次调用FQCN方法的是谁。