У меня есть class X
, и в нем есть метод static
под названием doStuff()
, и по какой-то причине у меня есть несколько других классов с методами, вызывающими doStuff()
. Есть ли способ, например, иметь метод печати в doStuff()
, который печатает, из каких методов и классов он вызывается?Как я могу получить класс и метод, вызывающие статический метод?
ответ
Да: new Throwable().getStackTrace()
возвращает массив StackTraceElement
. Индекс номер 1 является вашим абонентом.
+1: Или 'Thread.currentThread(). GetStackTrace()' –
Спасибо, но индекс, который я использовал, был 3. Индекс 1 дает мне имя класса A и doStuff(). – nyxz
Для этого вам не нужно силы a Exception
. Проверьте этот же вопрос:
Is there a way to dump a stack trace without throwing an exception in java?
/**
* <li> 0 dumpThreads
* <li> 1 getStackTrace
* <li> 2 getCallingMethodName
* <li> 3 [calling method]
*
* @return
*/
private String getCallingMethodName() {
return Thread.currentThread().getStackTrace()[3].getMethodName();
}
Вы можете получить класс вызывающего абонента с помощью:
package test;
class TestCaller {
public static void meth() {
System.out.println("Called by class: " + sun.reflect.Reflection.getCallerClass(2));
}
}
public class Main {
public static void main(String[] args) {
TestCaller.meth();
}
}
Выход: "Вызывается класса: класс test.Main"
Пожалуйста, не» Это сделать! (С возможным исключением отладки, но даже там тестирование, вероятно, будет лучше.) –