Автор оригинала: Chris Oberle.
1. Обзор
Поддержка отражения параметров метода была добавлена в Java 8. Проще говоря, он обеспечивает поддержку получения имен параметров во время выполнения.
В этом кратком руководстве мы рассмотрим, как получить доступ к именам параметров для конструкторов и методов во время выполнения с помощью отражения.
2. Аргумент компилятора
Чтобы иметь возможность получить доступ к информации об имени метода, мы должны явно зарегистрироваться.
Для этого мы указываем параметр parameters во время компиляции .
Для проекта Maven мы можем объявить эту опцию в pom.xml :
org.apache.maven.plugins maven-compiler-plugin 3.1 1.8 1.8 -parameters
3. Пример класса
Мы будем использовать надуманный Person класс с одним свойством под названием FullName для демонстрации:
public class Person { private String fullName; public Person(String fullName) { this.fullName = fullName; } public void setFullName(String fullName) { this.fullName = fullName; } // other methods }
4. Использование
Класс Parameter является новым в Java 8 и имеет множество интересных методов. Если был указан параметр компилятора -parameters , метод isNamePresent() вернет значение true.
Чтобы получить доступ к имени параметра, мы можем просто вызвать getName() :
@Test public void whenGetConstructorParams_thenOk() throws NoSuchMethodException, SecurityException { Listparameters = Arrays.asList(Person.class.getConstructor(String.class).getParameters()); Optional parameter = parameters.stream().filter(Parameter::isNamePresent).findFirst(); assertThat(parameter.get().getName()).isEqualTo("fullName"); } @Test public void whenGetMethodParams_thenOk() throws NoSuchMethodException, SecurityException { List parameters = Arrays.asList( Person.class.getMethod("setFullName", String.class).getParameters()); Optional parameter= parameters.stream() .filter(Parameter::isNamePresent) .findFirst(); assertThat(parameter.get().getName()).isEqualTo("fullName"); }
5. Заключение
В этой краткой статье мы рассмотрели новую поддержку отражения имен параметров, которая стала доступна в Java 8.
Наиболее очевидным вариантом использования этой информации является помощь в реализации поддержки автозаполнения в редакторах.
Как всегда, исходный код можно найти на Github .