检查哪个类调用了函数

Chr*_*örz 6 java

如何检查哪个类调用了我的方法?

例如:如果A类使用C类中的MethodB,那么如果B类调用MethodB,该函数应该执行除函数之外的其他操作.

我不能在方法中添加布尔值或类似的东西.

Jon*_*eet 7

没有好办法做到这一点 - 从根本上说这是一个糟糕的设计,IMO.如果ClassA和ClassB想要发生不同的事情,他们应该调用不同的方法.

根据我的经验,这是合理的唯一一次是在尝试初始化记录器的简单方法时,基本上您希望调用类名称成为记录器名称的一部分.一种可怕的方法是抛出并捕获异常,然后查看其堆栈跟踪.但尽可能避免......


Ram*_*oza 5

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()  
Run Code Online (Sandbox Code Playgroud)

javadoc:

数组的最后一个元素表示堆栈的底部,它是序列中最近的方法调用。

以及您可以从每个项目中获得什么的文档StackTraceElement

http://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html

getClassName()
getFileName()
getLineNumber() 
getMethodName()
Run Code Online (Sandbox Code Playgroud)


Jun*_*san 5

可以找到调用方法的类名。这是您如何实现它。

class A {

    public void testMethodCall() {
        new C().testMethod();
    }
}

class B {
  public void testMethodCall() {
      new C().testMethod();
  }
}

class C {

    public void testMethod() {
        System.out.println("Called from class : " +Thread.currentThread().getStackTrace()[2].getClassName());
    }
}
public class Test
{
    public static void main(String args[]) {
        A a = new A();
        B b = new B();
        a.testMethodCall();
        b.testMethodCall();
    }

}
Run Code Online (Sandbox Code Playgroud)

输出

从班级调用:A

从班级调用:B

您可以使用此示例代码来适应您的需要。