我可以确定谁在调用函数或在Java中实例化一个类吗?

时间:2010-10-11 16:14:35

标签: java language-features

  

可能重复:
  In Java, how do i find the caller of a method using stacktrace or reflection?

我只是好奇。我有时会请求该功能,但后来我用更多的代码解决了它。 (调用类在调用方法时说出了它的名字)

2 个答案:

答案 0 :(得分:9)

private Class getCallingClass() {
    return new SecurityManager() {
       protected Class[] getClassContext(){return super.getClassContext();} 
    }.getClassContext()[2];
}  

OR

public class Foo {

    public static final void main(final String[] args) {

        test();
    }

    private static void test() {

        Throwable e = new Throwable();

        StackTraceElement[] elements = e.getStackTrace();
        System.out.println(elements.length > 1 ? elements[1].toString() : "(no caller)");
    }
}

答案 1 :(得分:1)

你可以使用'假例外'来做,即使这个技巧感觉有点脏。

    try {
        throw new RuntimeException();
    } catch (RuntimeException e) {
        System.out.println(e.getStackTrace()[1]);
    }

getStackTrace会返回StackTraceElement个对象的数组,您可以查看API以查看可以对它们执行的操作。