A partire da Java 5 è possibile usare il metodo getStackTrace() di Thread per ottenere lo "stack trace" (a dire il vero è possibile ottenerlo anche in Java 1.4 ma in altro modo, tramite una eccezione).
codice:
public class Prova
{
public static void main (String[] args)
{
Test t = new Test ();
t.test ();
}
}
class Test
{
public void test ()
{
StackTraceElement[] steArr = Thread.currentThread ().getStackTrace ();
int i = 0;
while (!steArr[i].getClassName ().equals (getClass ().getName ()))
i++;
System.out.println ("La classe chiamante e`: " + steArr[i+1].getClassName ());
}
}
Il ciclo while che ho usato, in teoria non dovrebbe servire, sempre in teoria basterebbe usare un offset preciso nell'array. Peccato che un offset costante non vada bene perché c'è una leggera differenza nello stack trace tra Java 5 e Java 6 (per essere precisi, in Java 5 vengono elencati 2 metodi di Thread al top dello stack trace mentre in Java 6 solo 1).