2010-10-11 3 views

Répondre

1

Vous pouvez le faire en utilisant 'fake exception', même si cette astuce est plutôt sale.

try { 
     throw new RuntimeException(); 
    } catch (RuntimeException e) { 
     System.out.println(e.getStackTrace()[1]); 
    } 

getStackTrace retourne un tableau de StackTraceElement objets, vous pouvez vérifier API voir ce que vous pouvez faire avec eux.

+0

vous n'avez pas besoin de le jeter, vérifiez ma réponse –

+0

@ org.life.java Merci, bon à savoir –

9
private Class getCallingClass() { 
    return new SecurityManager() { 
     protected Class[] getClassContext(){return super.getClassContext();} 
    }.getClassContext()[2]; 
} 

OU

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)"); 
    } 
} 
+0

Je ne pense pas que vous avez même besoin d'appeler 'fillInStackTrace': selon les [docs] (http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Throwable.html#Throwable%28%29), le constructeur l'appelle pour vous. – casablanca

+0

@casablanca oui d'accord –

Questions connexes