Возвращение своего StackTrace каждым методом в Java
Есть учебная задача: Каждый метод должен возвращать свой StackTrace Написать пять методов, которые вызывают друг друга. Каждый метод должен возвращать свой StackTrace.
Прошу проинспектровать код в сторону упрощения, тк я новичек... так сказать ревью от людей с опытом...
public static void main(String[] args)
{
method1();
}
public static StackTraceElement method1()
{
StackTraceElement elem = null;
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraceElements) {
if (element.getMethodName().equals("method1"))
{
elem = element;
System.out.println(element.getMethodName());
}
}
method2();
return elem;
}
public static StackTraceElement method2()
{
StackTraceElement elem = null;
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraceElements) {
if (element.getMethodName().equals("method2"))
{
elem = element;
System.out.println(element.getMethodName());
}
}
method3();
return elem;
}
public static StackTraceElement method3()
{
StackTraceElement elem = null;
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraceElements) {
if (element.getMethodName().equals("method3"))
{
elem = element;
System.out.println(element.getMethodName());
}
}
method4();
return elem;
}
public static StackTraceElement method4()
{
StackTraceElement elem = null;
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraceElements) {
if (element.getMethodName().equals("method4"))
{
elem = element;
System.out.println(element.getMethodName());
}
}
method5();
return elem;
}
public static StackTraceElement method5()
{
StackTraceElement elem = null;
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
for (StackTraceElement element : stackTraceElements) {
if (element.getMethodName().equals("method5"))
{
elem = element;
System.out.println(element.getMethodName());
}
}
return elem;
}
Ответы (1 шт):
Автор решения: Alexandr
→ Ссылка
Текущий метод будет всегда на второй позиции. Поэтому код можно переписать следующим образом:
public static void main(String[] args) {
method1();
}
public static StackTraceElement method1() {
method2();
return Thread.currentThread().getStackTrace()[1];
}
public static StackTraceElement method2() {
method3();
return Thread.currentThread().getStackTrace()[1];
}
public static StackTraceElement method3() {
method4();
return Thread.currentThread().getStackTrace()[1];
}
public static StackTraceElement method4() {
method5();
return Thread.currentThread().getStackTrace()[1];
}
public static StackTraceElement method5() {
return Thread.currentThread().getStackTrace()[1];
}