Thursday, January 11, 2007

Invoker class

For a long time I've been thinking how to write code to get the name of the calling class, some days back I was reading an article which arose my curiosity again. I was successful doing it in two ways.

1. Stacktrace method

One of the hints which I got was our exception class, whenever an exception is thrown we get the whole stack strace, which includes the invoking classes.
Throwable t = new Throwable(); 
StackTraceElement callerClass = t.getStackTrace()[1];

Gets the class name :)

2. Security Manager method

class SM extends SecurityManager {
public Class[] getClassContext() {
return super.getClassContext();

SM sm = new SM();
Class[] classContext = sm.getClassContext();

Bingo, got the class name. getClassContext() is a protected method, to use it we need to extend security manager or use it as I've done above.