Есть ли лучший способ, чем анализ трассировки стека, чтобы получить текущий работающий или вызывающий метод? - PullRequest
1 голос
/ 12 июля 2020

Исторический метод заключался в анализе вывода Thread.currentThread().getStackTrace(), но с Java 8 было внесено так много изменений (например, как дескрипторы методов), что я не был уверен, существует ли лучший способ сейчас.

Если это поможет, моя конкретная c цель - действовать на основе аннотаций вызывающего метода, если это возможно.

1 Ответ

0 голосов
/ 12 июля 2020

Java 9 представил StackWalker API

Лучше всего хранить ваш экземпляр StackWalker в закрытом поле stati c final:

class SomeClass {
    private static final StackWalker SW = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);

    public someCallerSensitiveMethod() {
        Class<?> caller = SW.getCallerClass();
        // Do something with it, like check it's annotations
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...