Нужно написать функцию, которая бы вернула полное имя класса и имя вызывающей функции в процессе выполнения. Полное имя класса я получаю, а как использовать получаемые с помощью .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());
Это, конечно, намного проще.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня случается утечка памяти и сервер падает с Out of Memory Error
Суть проблемы: у меня есть файлproperties, в нем лежат все данные необходимые для настройки конекшн пула, также есть конфиг файл который считывает...
Если в Java для выделения памяти под новый объект используют ключевое слово new, то почему в данной ситуации, при создании экземпляра класса...