0

I'd like to know what's the type of the object which is calling a method in another class in Java, e.g. :

 class A{
   public A(){
     //..
   }
   public void method1{
      //here I'd like to find what's the type of the object which is calling this method 
   }
  }

  class B{
    public B(){
      A a = new A();
      a.method1();
     }
   }

  class C{
     public C(){
        A a = new A();
        a.method1();
     }
   }
4

2 回答 2

4

您可以通过在对代码的方法调用时检查堆栈来做到这一点。查看Thread.getStackTrace()并使用返回的当前线程

Thread.currentThread()

您可以备份堆栈跟踪数组并确定调用者链。但是请注意文档中的警告:

在某些情况下,某些虚拟机可能会从堆栈跟踪中省略一个或多个堆栈帧。在极端情况下,允许没有关于该线程的堆栈跟踪信息的虚拟机从该方法返回一个长度为零的数组。

如果您需要找出谁为您的类的子集调用了您,我会更改这些类,以便它们实现一些Caller/Callee接口并实现方法签名,从而:

public void doSomething(..., Caller caller);

你的调用类实现的地方Caller。这样你就可以强制执行一些相对类型安全的方法调用和参数传递。

于 2013-05-14T14:39:33.877 回答
2

尝试这个:

Thread.currentThread().getStackTrace()
于 2013-05-14T14:39:54.713 回答