查找在Java中调用方法的类的类型

时间:2013-05-14 14:35:27

标签: java oop class

我想知道在Java中调用另一个类中的方法的对象的类型是什么,例如:

 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();
     }
   }

2 个答案:

答案 0 :(得分:4)

您可以通过对代码的方法调用检查堆栈来执行此操作。查看Thread.getStackTrace()并使用

返回的当前主题
Thread.currentThread()

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

  

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

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

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

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

答案 1 :(得分:2)

试试这个:

Thread.currentThread().getStackTrace()