我试图确定哪个类调用了一个方法,有更优雅的方法吗?
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)
答案 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。