问题
Possible Duplicate:
In Java, how do i find the caller of a method using stacktrace or reflection?
I'm just curious. I was requesting that feature sometimes, but then I solved it with more code. (the calling class said its name while calling the method)
回答1:
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)");
}
}
回答2:
You can do it using 'fake exception', even though this trick feels kinda dirty.
try {
throw new RuntimeException();
} catch (RuntimeException e) {
System.out.println(e.getStackTrace()[1]);
}
getStackTrace
returns an array of StackTraceElement
objects, you can check API to see what you can do with them.
来源:https://stackoverflow.com/questions/3907983/can-i-determine-who-is-calling-a-function-or-instantiating-a-class-in-java