Получение имени параметра метода

В Java 6 предположим, что у меня есть следующая сигнатура метода:

public void makeSandwich(Bread slice1, Bread slice2, List fillings, boolean mustard) 

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

Я знаю, как получить список типов параметров с помощью getParameterTypes или getGenericParameterTypes .

В идеале я хотел бы получить список имен параметров вместо типов. Есть ли способ сделать это?

7 Solutions collect form web for “Получение имени параметра метода”

Имена параметров доступны, если вы сказали компилятору включить их (скомпилировать с информацией об отладке). Spring имеет ParameterNameDiscoverer который может помочь вам получить имена. Реализация по умолчанию использует asm ClassReader для этого.

С javac вы должны включить аргумент -g чтобы включить отладочную информацию. С Eclipse я думаю, что он есть по умолчанию; его можно настроить с помощью настроек: Java -> Compiler, а затем включить «Сохранить информацию о параметрах метода (можно использовать с помощью отражения)» (см. также этот ответ ).

Некоторые структуры используют это. Например, spring-mvc имеет @RequestParam который по умолчанию имеет имя параметра, если оно разрешимо. Он также поддерживает явное присвоение имен – @RequestParam("foo") в случае отсутствия отладочной информации.

Я нашел другое решение после того, как ответил на этот вопрос. Решение – Paranamer .

Пример:

  Method method = Foo.class.getMethod(...); Paranamer paranamer = new CachingParanamer(); String[] parameterNames = paranamer.lookupParameterNames(method) // throws ParameterNamesNotFoundException if not found // or ... parameterNames = paranamer.lookupParameterNames(method, false) // will return null if not found 

В именах параметров Java недоступны через reflection.

Это невозможно. Файлы classов не содержат имена аргументов, как вы можете видеть с автозаполнением IDE, когда источник недоступен.

Поэтому API отражения не может выдавать имена параметров.

В дополнение к этому ответу: «Имена параметров доступны, если вы сказали компилятору включить их»

Если вы используете Eclipse, перейдите в проект -> свойства -> Компилятор Java -> отметьте «Сохранить информацию о параметрах метода (можно использовать с помощью отражения)

Вы можете просто присвоить значение параметра другому значению

 Bread slice2; public void makeSandwich(Bread slice1, Bread slice2, List fillings, boolean mustard) { this.slice2 = slice2; System.out.println(this.slice2.getSomething()); } 

У вас есть код метода? Вы могли бы аннотировать параметры и передавать имена в качестве аргументов @Param("slice1") . Позже вы сможете получить аннотацию и извлечь имя параметра из нее.

  • Как загрузить файл jar во время выполнения
  • Удалить контейнер верхнего уровня во время выполнения
  • Динамически создаваемые элементы управления теряют данные после обратной передачи
  • Задание типа коллективного типа во время выполнения
  • Ошибка при проверке версии Java: не удалось найти java.dll
  • Динамическое изменение уровня журнала log4j
  • Ошибка открытия ключа реестра Java
  • читать вывод из java exec
  • Печать Runtime exec () OutputStream для консоли
  • Добавление файлов в java classpath во время выполнения
  • Измените метод во время выполнения через механизм «горячей замены»
  • Давайте будем гением компьютера.