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

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

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

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

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

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

Имена параметров доступны, если вы сказали компилятору включить их (скомпилировать с информацией об отладке). 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") . Позже вы сможете получить аннотацию и извлечь имя параметра из нее.

  • Выполнение внешней программы в java
  • Как загрузить динамические внешние компоненты в угловое приложение
  • Удалить контейнер верхнего уровня во время выполнения
  • Печать Runtime exec () OutputStream для консоли
  • выполнить код c # во время выполнения из файла кода
  • Перенаправить Runtime.getRuntime (). Exec () с помощью System.setOut ();
  • Ошибка при проверке версии Java: не удалось найти java.dll
  • Задание типа коллективного типа во время выполнения
  • Запуск java-программы из другой java-программы
  • Динамическое изменение уровня журнала log4j
  • Измените метод во время выполнения через механизм «горячей замены»
  • Давайте будем гением компьютера.