7

如何在不将任何变量传递给该方法的情况下找出哪个类调用了我的方法?假设我们有这样的事情:

Class A{}
Class B{}
Class C{
public void method1{}
System.out.print("Class A or B called me");
}

假设 A 类的实例调用 C 类的实例,B 类也是如此。当 A 类调用 C 类方法 1 方法时,我希望它打印类似“A 类调用我”之类的内容,而当 B 类调用它时打印“B班叫我”。

4

2 回答 2

14

没有真正简单的方法可以做到这一点,因为通常方法不需要也不应该需要关心从哪里调用它。如果你编写你的方法,使它的行为取决于它从哪里被调用,那么你的程序很快就会变成一个难以理解的混乱。

但是,这里有一个例子:

public class Prut {
    public static void main(String[] args) {
        example();
    }

    public static void example() {
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        StackTraceElement element = stackTrace[2];
        System.out.println("I was called by a method named: " + element.getMethodName());
        System.out.println("That method is in class: " + element.getClassName());
    }
}
于 2012-08-28T14:18:10.307 回答
6

您可以使用Thread.currentThread().getStackTrace()

它返回一个数组,[StackTraceElements][1]其中表示程序的当前堆栈跟踪。

于 2012-08-28T14:15:18.427 回答