如何区分哪个类调用方法?

时间:2015-04-15 23:02:10

标签: java class

我试图确定哪个类调用了一个方法,有更优雅的方法吗?

public void testMethod(Class c) {
    String className = c.getCanonicalName();
    int splitAfter = className.lastIndexOf(".");
    String parsedName = className.substring(splitAfter + 1,className.length());

    if (parsedName.contains("ClassA")) {
    // Do class A specific stuff
    } else if (parsedName.contains("ClassB")) {
    // Do class B specific stuff
    } else if (parsedName.contains("ClassC")) {
    // Do Class C specific stuff
    }
}

调用
testMethod(this.getClass)

2 个答案:

答案 0 :(得分:1)

你有什么理由不能这样做:

if(c == ClassA.class) {
    // do stuff
} else if(c == ClassB.class) {
    // do stuff
} else if(c == ClassC.class) {
    // do stuff
}

不需要字符串操作!

答案 1 :(得分:0)

我相信你可以从堆栈跟踪中获取调用者类:

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();

它是一个堆栈,因此前一个Class应该在索引1处。

有关StackTraceElement的详细信息,请参阅documentation