Java语言怎么样对函数进行反调用,即函数内判断谁在调用自身,只允许一些特定的函数调用,不允许其余的函数调用,怎么实现
如图 :
代码如下 :
public class FunctionCaller {
public static void main(String[] args) {
// 调用函数A
functionA();
}
public static void functionA() {
if (isAllowedCaller()) {
System.out.println("Function A 被允许的函数调用");
} else {
System.out.println("Function A 被一个不允许的函数调用");
}
}
public static boolean isAllowedCaller() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
for (int i = 2; i < stackTrace.length; i++) {
String callerMethodName = stackTrace[i].getMethodName();
// 判断允许调用的函数
if (callerMethodName.equals("functionB") || callerMethodName.equals("functionC")) {
return true;
}
}
return false;
}
public static void functionB() {
functionA(); // 允许调用functionA
}
public static void functionC() {
functionA(); // 允许调用functionA
}
public static void functionD() {
functionA(); // 不允许调用functionA
}
}
思路分析 :
使用Thread.currentThread().getStackTrace()方法获取当前线程的方法调用栈信息,通过分析方法调用栈的信息,来判断哪些函数调用了当前函数,