找出我的方法

时间:2012-04-05 18:40:37

标签: java reflection

我想找到一种方法来获取调用我的完整方法签名。

例如:

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”作为方法名称。< / p>

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

1 个答案:

答案 0 :(得分:1)

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

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

另外,想一想,你可以说方法重载(不是重写!)被认为是有害的。您真的需要使用不同参数和相同名称的多种不同方法吗?