Нужно написать функцию, которая бы вернула полное имя класса и имя вызывающей функции в процессе выполнения. Полное имя класса я получаю, а как использовать получаемые с помощью .getDeclaredMethods() данные для определения имени вызывающего метода, не знаю.
// объект нужного класса
Class<?> c = new Object() { }.getClass().getEnclosingClass();
// полное имя класса
String nameFullleClass = c.getName();
// массив с именами всех методов
Method[] methods = c.getDeclaredMethods();
Вопрос: как обработать массив, чтобы увидеть имя именно вызывающей функции? Или есть какой-то еще способ? Спасибо!
Рефлексия для этого не предназначена. Это можно сделать с помощью StackWalker
.
System.out.println(StackWalker
.getInstance()
.walk(
stackFrameStream -> stackFrameStream.map(
stackFrame -> stackFrame.getClassName() + " / " + stackFrame.getMethodName()
).skip(1).limit(1).collect(Collectors.toList())
).get(0));
Либо, как предложил Stranger in the Q
, через Exception
.
StackTraceElement sTE = new Exception().getStackTrace()[1];
System.out.println(sTE.getClassName() + " / " + sTE.getMethodName());
Это, конечно, намного проще.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня случается утечка памяти и сервер падает с Out of Memory Error
Суть проблемы: у меня есть файлproperties, в нем лежат все данные необходимые для настройки конекшн пула, также есть конфиг файл который считывает...
Если в Java для выделения памяти под новый объект используют ключевое слово new, то почему в данной ситуации, при создании экземпляра класса...