在构造函数中,找到创建该对象的类?

时间:2014-06-13 16:58:22

标签: java constructor

这是我想要做的事情:

在我的代码中,我有一组创建其他类对象的类。我想要做的是,在类的构造函数中调用构造函数,找到首先调用构造函数的类。

例如:

Main.java:

public class Main {

    public static void main(String[] args) {
        Test t = new Test();
    }

}

Test.java:

public class Test {
    public Test(){
    //somehow find the class where I came from :(
    }
}

2 个答案:

答案 0 :(得分:3)

假设您无法传入调用者的Class对象:除了非常需要这样的事实意味着一个相当讨厌的设计,那么,唯一的方法就是这样做是构造一个异常并检查其中的最后一个堆栈跟踪元素:

Exception e = new Exception();
StackTraceElement[] elements = e.getStackTrace();

数组中的第一个元素就是你要找的东西。

(在评论后更新)这在JITted环境中无法一致地工作。

答案 1 :(得分:2)

您可以使用以下内容:

public class Main {
    public static void main(String[] args) {
        new Main().runMe();
    }

    public void runMe() {
        new Test(this.getClass());
    }
}

class Test {
    public Test(Class clazz) {
        System.out.println("I was invoked from '" + clazz.getCanonicalName() + "' class.");
    }
}

打印:

  

我是从'Main'课程调用的。