Возвращение своего 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];
}
→ Ссылка