Как получить значения текущего метода без использования отражения в java

#java #logging #methods #reflection #reflections

Вопрос:

Я хотел бы создать новую аннотацию для имени метода регистрации и значения параметра метода.

Я использую приведенный ниже код для извлечения информации о параметрах метода без использования «отражения java» (потому что это слишком дорого).

     public void method1(String param1) {

    Method method = new Object() {}.getClass().getEnclosingMethod();

    System.out.printf(method.getName()   " : ");

    Parameter[] parameters = method.getParameters();
    for (Parameter parameter : parameters) {
        System.out.printf(parameter.toString());
    }
}
 

его выход составляет :

метод1 : java.lang.Строка arg0

Здесь я получаю тип параметра и его имя. Я хочу получить значение параметра

Я попробовал @Loggable аннотацию https://aspects.jcabi.com/ и это не работает.

@Регистрируемые ссылки: (https://aspects.jcabi.com/annotation-loggable.html) (https://aspects.jcabi.com/apidocs-0.22.6/com/jcabi/aspects/Loggable.html)

Комментарии:

1. Это невозможно с помощью размышления. Вы получаете доступ к определению метода. Определение метода ничего не говорит о каком-либо конкретном вызове.

2.Это странный вопрос. Все, что делает ваш код, в первую очередь getClass().getEnclosingMethod() , и method.getParameters() является отражением. Если это не Отражение, то что же тогда вы называете Отражением? Если вы хотите найти решение действительно без размышлений, System.out.println("method1: param1=" param1); сделайте свою работу.

3. Почти уверен, что то, как вы пытаетесь это сделать, совершенно невозможно. Вероятно, вам придется сделать это, повозившись с байт-кодом.

4. Ну, хотя это и не «невозможно», это потребует использования некоторых скрытых, неподдерживаемых API . И написание агента Java проще и лучше поддерживается. Это также, вероятно, повысит производительность.

5. Аннотации ничего не делают. Аннотации подобны параметрам или записям в файле конфигурации. Вам нужно реальное программное обеспечение, например, процессор аннотаций, который выполняет эту работу.