我在同一个类中有 2 个函数,比如function_1()
下面function_2()
的结构;
public class JavaClass {
function_1() {
if (wasCalledbyfunction_2()) {
... do something
}
...
}
function_2() {
function_1()
...
}
我很难找到实现该方法的wasCalledbyfunction_2()
方法。也就是说,如果 function_1 被函数 2 调用,我想改变前者的行为。
我尝试过使用内置的 Stack Trace 方法,但我对如何实际实现它缺乏了解。
任何帮助表示赞赏!
您可以使用 : StackTraceElement.getMethodName()
,该方法的调用返回包含此堆栈跟踪元素表示的执行点的方法的名称。
public class JavaClass {
void function_1() {
StackTraceElement stackTraceElements[] = (new Throwable()).getStackTrace();
if (stackTraceElements[1].getMethodName().equals("function_2")) {
System.out.println("Called by function_2");
} else {
System.out.println("Called by another method !");
}
}
void function_2() {
function_1();
}
void function_3() {
function_1();
}
public static void main(String[] args) {
new JavaClass().function_2();
new JavaClass().function_3();
}
}
输出 :
Called by function_2
Called by another method !
stackTraceElements[0].getMethodName()
将包含当前方法名称:function_1
stackTraceElements[2].getMethodName()
将包含调用方方法名称:function_2
stackTraceElements[3].getMethodName()
将包含第一个调用方方法名称:main
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句