4

我正在寻找一种方法来获取调用我的完整方法签名。

例如:

public class Called {

    public void whoCallMe() {
        System.out.println("Caller Method: " + new Throwable().getStackTrace()[1].getMethodName());
    }
}

public class Caller {

public static void run(int i) {
    new Called().whoCallMe();
}

public static void run(String str) {
    new Called().whoCallMe();
}

public static void run(boolean b) {
    new Called().whoCallMe();
}

/** MAIN **/
public static void main(String[] args) {
    run("hi");
}

我实现 whoCallMe() 方法的方式我可以看到 run 方法调用了它,但是由于我 3 次重载我不能说哪一个是调用者,因为 whoCallme 只返回“run”作为方法名称。

你们知道我可以获得完整方法签名的其他方式吗 run(java.lang.String) ?

4

1 回答 1

2

您可以使用 AspectJ 创建一个适用于每个方法调用的方面,并将有关被调用方法的详细信息添加到每个线程堆栈中,然后在方法完成后将其删除。当然,它会非常昂贵。很可能你不想这样做。你也不想扔任何东西来找出谁打电话给你。

基本上你的问题的答案是:不要这样做。解释为什么你认为你想这样做,有人会给你一个很好的选择。

另外,想一想,您可以争辩说方法重载(而不是覆盖!)被认为是有害的。您真的需要多个具有不同参数和相同名称的不同方法吗?

于 2012-04-05T18:44:54.373 回答