Java语言怎么样对函数进行反调用,即函数内判断谁在调用自身

Java语言怎么样对函数进行反调用,即函数内判断谁在调用自身,只允许一些特定的函数调用,不允许其余的函数调用,怎么实现

如图 :

img

代码如下 :

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()方法获取当前线程的方法调用栈信息,通过分析方法调用栈的信息,来判断哪些函数调用了当前函数,