2012-06-13 6 views
4

Я хотел бы знать, есть ли способ в java, чтобы узнать класс/объект, который вызвал определенный статический метод.JAVA: Знание метода/класса, из которого был вызван статический метод

Пример:

public class Util{ 
... 
public static void method(){} 
... 
} 

public class Caller{ 
... 
public void callStatic(){ 
    Util.method(); 
} 
... 
} 

Могу ли я узнать, если Util.method был вызван из Caller класса?

+3

Имена классов должны начинаться с прописной буквы :) – Autar

+0

я не знаю, где я получил строчную привычку (вероятно ActionScript) :) Я использую прописную буквенную надпись @work, но мой ум настроен ниже. – CosminO

+0

Это лучше. :) – trumank

ответ

5

Вы можете использовать Thread.currentThread().getStackTrace() в Util.method.

Чтобы получить последний вызов до Util.method вы можете сделать что-то вроде этого:

public class Util { 
... 
public static void method() { 
    StackTraceElement[] st = Thread.currentThread().getStackTrace(); 
    //st[0] is the call of getStackTrace, st[1] is the call to Util.method, so the method before is st[2] 
    System.out.println(st[2].getClassName() + "." + st[2].getMethodName()); 
} 
... 
} 
+1

Я думаю, что искатель хочет больше, чем имя класса и метод, сам объект. – trumank

+0

Если он этого хочет, он действительно не спрашивал об этом :) – tibtof

+0

Возможно, моя постановка вопроса была ошибочной, да. Это то, чего я действительно хотел. Есть ли способ узнать конкретный объект? :) – CosminO